Spark on Yarn客户端作业提交过程分析
2016-04-20 11:13
344 查看
Spark on Yarn 客户端模式作业提交过程分析
https://www.zybuluo.com/rickyChen/note/312098我们将以一个Spark Streaming为例,阅读spark相关源码,简述Spark on Yarn客户端模式下作业提交流程。作业是通过spark-submit脚本提交的,因此整个流程从spark-submit代码开始分析。若有错误,希望各位看官指出。
通过
submit获取提交代码的
MainClass
通过反射机制
Utils.classForName创建相关的类,并获取其中的
mainMethod
通过反射调用直接调用上一步获得的
mainMethod,开始运行作业的main方法
首先,新建一个
SparkConf类,其中封装了Spark和Application相关配置信息。
把
SparkConf和批处理间隔做给参数创建一个
StreamingContext类
在对
StreamingContext初始化的过程中,调用构造器,新建一个
SparkContext类.新建
SparkContext的过程中,有以下步骤需要关注(以下步骤按顺序执行):
JobProgressListener
作业流程监听器,可以获取整个Application运行流程中每个Stage、Job的具体信息。追踪task级别的信息,用作在UI上的展示。
createSparkEnv
以
SparkConf和
listenerBus为参数调用
createSparkEnv函数。其中,
listenerBus是spark中的监听器,包括
JobProgressListener。在
createSparkEnv调用的过程中,将调用
SparkEnv对象的
createDriverEnv成员函数,在这个过程中会创建一个
actorSystem和一个
rpcEnv,生成一个
driver,这将创建一个
SparkEnv对象,
SparkEnv对象中将封装诸如
rpcEnv,
actorSystem,
cacheManager,
mapOutputTracker,
shuffleManager,
broadcastManager,
blockManager,
memoryManager等成员类,成员类的作用如下:
mapOutputTracker
跟踪一个stage map、output的位置。获取map、output的信息。driver、executor使用不同的HashMap存储元数据。
shuffleManager
shuffleManager会在driver和每个executor中创建,我们可以通过
spark.shuffle.manager来对shuffle进行配置,executor可以同过
shuffleManager接口读写数据。
broadcastManager
广播变量管理器
blockManager
外部类与storage模块打交道都要通过调用
BlockManager相应接口实现
memoryManager
内存管理器,协调运行内存和存储内存,其中运行资源负责shuffles、 joins、sorts和aggregations,存储内存负责caching和扩散。每一个executor都有一个memoryManager
SparkStatusTracker
低级API,
SparkStatusTracker类方法将调用
JobProgressListener类中的成员变量,
SparkStatusTracker可以获得Application中Stage、Job的具体信息,但只提供最近几个Jobs/Stages信息。
HeartbeatReceiver
运行在
driver上的一个类,负责接受来自
executor的心跳信息。
createTaskScheduler
调用
createTaskScheduler,返回两个对象:
_schedulerBackend、
_taskScheduler,并创建
_dagScheduler。
DAGScheduler初始化完成之后,将调用
_taskScheduler.start(),这一步主要进行了:
新建一个
ClientArguements类,封装一些Application中需要的资源相关的配置信息。
以
ClientArguements为参数,新建一个
Client类
调用
Client.submitApplication
调用hadoop-yarn接口初始化
yarnClient,从集群上申请一个Application,获取Application id,判断集群是否有足够资源,否则中断。向yarn集群申请一个Container运行
ApplicationMaster,最后把整个Application提交到Yarn集群上运行。
Reference
https://github.com/apache/spark/tree/branch-1.4
http://spark.apache.org/docs/1.4.1/running-on-yarn.html
相关文章推荐
- java日志 java.util.logging.Logger用法
- 自定义带闪动和多背景的textview
- Android 颜色渲染(九) PorterDuff及Xfermode详解
- java web笔记-servlet
- C# GET 和 SET作用
- JS 正则表达式
- Android开发之定义接口暴露数据
- 什么时候使用tab键来对齐代码和代码的风格
- 输出n对符合的括号组合
- android自定义控件- 自定义组合控件
- Swift报错type ''does not conform to protocol 'UITableViewDataSource'
- USB驱动开发(六)操作USBD.SYS
- 解析C语言中结构体struct的对齐问题
- The hierarchy of the type XXAdvice is inconsistent
- Codeforces Round #106(Div. 2) 149D. Coloring Brackets 区间DP 记忆化搜索
- Spring scope属性详解
- IDEA中如何新建一个带有-P目录的项目
- PCL系列——平面模型分割
- 推荐一个latex简历模板的网站给大家
- hdu 【3833】YY's new problem