您的位置:首页 > 其它

spark 1.6.0 core源码分析1 集群启动及任务提交过程

2016-07-05 17:49 826 查看
spark版本号:1.6.0

spark源码分析目的是在解读源码的过程中记录一些重要的步骤,加深记忆,方便以后复习。
Standalone集群启动及任务提交过程详解



正常启动及job提交过程如下:

1. 启动master

2. 启动worker

3. 客户端提交application到master

4. master发送LaunchExecutor指令给相应worker

5. worker启动Executor进程

6. Executor将自己注册到driver中

7. 将spark job分解成多个task发散到各个Executor上运行

Spark在YARN中有yarn-cluster和yarn-client两种运行模式:

I. Yarn Cluster


Spark Driver首先作为一个ApplicationMaster在YARN集群中启动,客户端提交给ResourceManager的每一个job都会在集群的worker节点上分配一个唯一的ApplicationMaster,由该ApplicationMaster管理全生命周期的应用。因为Driver程序在YARN中运行,所以事先不用启动Spark Master/Client,应用的运行结果不能在客户端显示(可以在history server中查看),所以最好将结果保存在HDFS而非stdout输出,客户端的终端显示的是作为YARN的job的简单运行状况。





 1. 由client向ResourceManager提交请求,并上传jar到HDFS上 这期间包括四个步骤:

      a). 连接到RM 

      b). 从RM ASM(ApplicationsManager )中获得metric、queue和resource等信息。

      c). upload app jar and spark-assembly jar 

     d). 设置运行环境和container上下文(launch-container.sh等脚本)

2. ResouceManager向NodeManager申请资源,创建Spark ApplicationMaster(每个 SparkContext都有一个ApplicationMaster) 

3. NodeManager启动Spark App Master,并向ResourceManager AsM注册 

4. Spark ApplicationMaster从HDFS中找到jar文件,启动DAGscheduler和YARN Cluster Scheduler 

5. ResourceManager向ResourceManager AsM注册申请container资源(INFO YarnClientImpl: Submitted application)

6. ResourceManager通知NodeManager分配Container,这时可以收到来自ASM关于 container的报告。(每个container的对应一个executor) 

7. Spark ApplicationMaster直接和container(executor)进行交互,完成这个分布式任务。 

需要注意的是:

      a). Spark中的localdir会被yarn.nodemanager.local-dirs替换 

      b). 允许失败的节点数(spark.yarn.max.worker.failures)为executor数量的两倍数量,最小为3. 

      c). SPARK_YARN_USER_ENV传递给spark进程的环境变量 

      d). 传递给app的参数应该通过–args指定。

II. yarn-client

(YarnClientClusterScheduler)查看对应类的文件 在yarn-client模式下,Driver运行在Client上,通过ApplicationMaster向RM获取资源。本地Driver负责与所有的executor container进行交互,并将最后的结果汇总。结束掉终端,相当于kill掉这个spark应用。一般来说,如果运行的结果仅仅返回到terminal上时需要配置这个。



客户端的Driver将应用提交给Yarn后,Yarn会先后启动ApplicationMaster和executor,另外ApplicationMaster和executor都 是装载在container里运行,container默认的内存是1G,ApplicationMaster分配的内存是driver-memory,executor分配的内存是executor-memory。同时,因为Driver在客户端,所以程序的运行结果可以在客户端显 示,Driver以进程名为SparkSubmit的形式存在。 配置YARN-Client模式同样需要HADOOP_CONF_DIR/YARN_CONF_DIR和SPARK_JAR变量。 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  源码 spark