Spark on Yarn资源调度源码解析
来源:互联网 发布:mac mini u盘重装系统 编辑:程序博客网 时间:2024/06/05 11:15
在命令行中调用SparkSubmit类启动Spark自定义Jar包执行的时候当前节点调用的有主函数的类名childMainClass分为
-----------------
standalone: org.apache.spark.deploy.rest.RestSubmissionClient
client:jar包中main函数,默认形式
yarn-cluster:org.apache.spark.deploy.yarn.Client
memos:org.apache.spark.deploy.rest.RestSubmissionClient
在SparkContext文件各调度模式的相关类
-----------------
local:LocalSparkCluster + SparkDeploySchedulerBackend + TaskSchedulerImpl
yarn-cluster: YarnClusterSchedulerBackend + YarnClusterScheduler
yarn-client:YarnClientSchedulerBackend + YarnScheduler
standalone:SparkDeploySchedulerBackend + TaskSchedulerImpl
memos:MesosSchedulerBackend + TaskSchedulerImpl
yarn-cluster模式各节点所执行的代码入口
-----------------
在客户端节点做的事情:
SparkSubmit//提交自定义程序并在在客户端机器本地建立运行环境
submit.doRunMain.runMain
loader//设置类加载器
Client.main
YarnClient.submitApplication
在yarn集群中选的Driver程序运行节点做的事情:
ApplicationMaster.main//yarn-cluster模式Driver所在节点
run.runDriver
在yarn集群其它节点做的事情:
ExecutorLauncher.main//yarn-cluster模式Executor所在节点
ApplicationMaster.main
run.runExecutorLauncher//启动executor程序
yarn-cluster模式用户命令界面提交执行->初始化->调度->划分stage->生成task和tasket并提交执行的流程
----------------
SparkSubmit//提交自定义程序并在在客户端机器本地建立运行环境
submit.doRunMain.runMain
loader//设置类加载器
mainMethod.invoke//调用类的main方法,这个类根据不同调度模式是不同的类,具体参考本页面中关于childMainClass的内容
SparkContext//构造函数和成员变量初试化
DAGScheduler//新建对象DAGScheduler
new YarnClusterScheduler//TaskSchedulerImpl
new YarnClusterSchedulerBackend//RPC通信
TaskScheduler.start
YarnClusterSchedulerBackend.start
textFile//产生RDD和RDD对应的Partition,以及底层存储Block
RDD.map//RDD变换为另一个RDD,用于构造关系暂不实际计算
RDD.reduce//根据前面构造的依赖关系开始实际计算
SparkContext.runJob
DAGScheduler.runJob.submitJob
DAGSchedulerEventProcessLoop.post//触发任务提交事件,任务调度开始
eventQueue.put
eventQueue.take
DAGSchedulerEventProcessLoop.onReceive
DAGScheduler.handleJobSubmitted
newResultStage//构造final stage
updateJobIdStageIdMaps//通过RDD之间的依赖构造Stage间依赖关系
submitStage
submitMissingTasks
Serializer.serialize//对任务信息编组
partitionsToCompute//根据Stage类型对每个Partition建立对应Task
new ShuffleMapTask/ResultTask
TaskScheduler.submitTasks//进入Task级别的调度,在此处区分不同调度类型的行为
new TaskSet
createTaskSetManager
new TaskSetManager
SchedulableBuilder.addTaskSetManager//进入单机多任务的调度
FIFOSchedulableBuilder/FairSchedulableBuilder
SchedulerBackend.reviveOffers//实际调度程序
SparkDeploySchedulerBackend/YarnClusterSchedulerBackend/MesosSchedulerBackend
RpcEndpointRef.send
AkkaRpcEndpointRef.send
ActorRef ! AkkaMessage
Driver和Executor节点注册,分配资源和启动的流程
----------------
YarnClusterSchedulerBackend.start
Client
submitApplication
createContainerLaunchContext
ApplicationMaster.main//yarn-cluster模式Driver和ApplicationMaster所在节点
run.runDriver
startUserApplication//启动远程driver程序
mainMethod.invoke
runAMEndpoint//ApplicationMaster通信地址
registerAM//在ResourceManager上注册ApplicationMaster
YarnRMClient.register//
AMRMClient.registerApplicationMaster//进入Yarn原生API
new YarnAllocator//分配container的
YarnAllocator.allocateResources
AMRMClient.allocate//进入Yarn原生API
handleAllocatedContainers
runAllocatedContainers
new ExecutorRunnable
run
NMClient.start
startContainer
NMClient.startContainer//进入Yarn原生API
ExecutorLauncher.main//yarn-cluster模式Executor所在节点
ApplicationMaster.main
run.runExecutorLauncher//启动executor程序
waitForSparkDriver//等待客户端driver程序就绪
RpcEnv.create//建立ApplicationMaster和Driver通讯的RPC地址
runAMEndpoint//
registerAM
createApplicationSubmissionContext
YarnClient.submitApplication//进入Yarn原生API
JobScheduler//只在Streaming模块中使用,配合JobGenerator使用。
- Spark on Yarn资源调度源码解析
- 源码-Spark on Yarn
- Spark on Yarn解析
- Spark学习笔记之-Spark on yarn(动态资源调度)
- Intellij编译Spark on Yarn源码注意事项
- Spark On YARN启动流程源码分析
- spark on yarn 中的延迟调度(delay scheduler)
- Spark源码走读10——Spark On Yarn
- Spark源码系列(七)Spark on yarn具体实现
- Spark源码学习(9)——Spark On Yarn
- Spark源码系列(七)Spark on yarn具体实现
- Spark源码系列(七)Spark on yarn具体实现
- Spark on yarn CapacityScheduler中的ResourceCalculator(资源计算器)
- Yarn 资源调度策略
- Yarn 资源调度器
- YARN资源调度策略
- 资源调度框架YARN
- Yarn资源调度策略
- Linux UART接口调试技巧
- 解决 textarea 没有value 无法显示默认文字
- JMeter压力测试遇到的问题汇总
- C++ 中string.find() 函数的用法总结
- 问题 C: 某计算器的超电磁炮(加减乘除括号表达式求值)
- Spark on Yarn资源调度源码解析
- C#异步编程:ConfigeAwait
- 适配器模式
- JDK中多线程之JUC集合的JDK源码解读配合大神的一起看,秒懂。
- Oracle (+) 用法
- CUDA系列学习(一)An Introduction to GPU and CUDA
- 100亿数据1万属性数据架构设计
- eclipse打开当前文件所在文件夹的方法
- 解决 Mac 下 Android Studio 不打印日志