目录
零:初始触发
位置:org.apache.spark.SparkContext.scala
初始化代码:
val conf = new SparkConf().setAppName("WordCount");
val sc = new SparkContext(conf)
一:TaskSchedule初始化(宏观)
1.createTaskScheduler() ——》 TaskSchedulerImpl
2.TaskSchedulerImpl.start——》SparkDeploySchedulerBacked.start
3.AppClient——》ClientActor
4.registerWithMaster()
tryRegisterAllMasters()
RegisterApplication(case class)
在Master 上注册 Application
在Master 上注册 Driver
在Master 上注册 Worker
Worker上的Executor 反向注册到 TaskSchedule 中
重点:TaskSchedulerImpl底层实际主要基于 SparkDeploySchedulerBackend 来工作
二:DAGScheduler初始化(宏观)
DAGSchedulerEventProcessActor
DAGScheduler底层基于该组件进行通信(线程)
三:SparkUI
sparkUI:默认4040接口,显示application的运行状态
启动一个jetty服务器,来提供web服务,从而显示网页
四:源码解析
五:重点问题
1.什么时候开始Applicaiton的注册
Driver启动后,TaskSchedule() 初始化时
2.补充了解:SchedulerImpl.scala
1.1>通过调用SchedulerBackend,针对不同类的 cluster(standalone,yarn,mesos),调度task
1.2>可以通过使用一个LocalBackend,并且将isLocal参数设置为true,来在本地模式儿下工作
2>负责处理一些通用的逻辑,决定多个job的调度顺序,启动推测任务执行
3>客户端首先调用它的 start() initialize()然后通过 runTasks()方法提交 task sets
3.DAGScheduler.scala 补充:
1>实现了面向stage的调度机制的高层次的调度层
2>它会为每个job计算一个stage的DAG(有向无环图)
3>追踪RDD和stage的输出是否被物化(写入磁盘或者内存等地方),寻找一个(最优,最小)调度机制来运行job
4>它会将stage作为tasksets提交到底层的TaskSchedulerImpl上,并且决定运行每个task的最佳位置
5>会处理运算文件的丢失等(shuffle计算而丢失,或者OM溢出等错误)