SparkContext内核架构深度剖析
目录
一:Spark的核心运转分析
1.spark-submit 提交 Application 到 Driver 上执行
2.设置 SparkConf , 初始化 SparkContext ,SparkContext 建立 DAGScheduler 和 TaskScheduler
3.TaskScheduler 提交 Application 到 Master上
4.Master给Application分配对应的Worker上的Executor
5.Executor反向注册到 TaskScheduler上, 完成整体的注册工作
6.当Application程序执行到 Action 操作时,会触发 Job 任务
7.DAGScheduler 将 Job 划分为对应的 Stage , 每一个Stage 由 一个TaskSet 组成
8.TaskScheduler 将 TaskSet 里面的每一个 Task 分发到对应的已经注册的 Executor上 运行
9.Executor 会用 TaskRunner 封装接收的每一个Task,然后用线程池分配的线程进行执行任务
10.Task 分为 ShuffleTask 和 ResultTask,最后一个 Stage 可以称为 ResultTask,其余为 ShuffleTask
11.每个Task任务,处理 RDD中的某一个 partition,执行相应的算子和函数
12.RDD可以看成是上亿的数据,每一个partition可能是Hadoop上分布式的节点
13.然后就这样完美的进行工作!:) 开心
二:重点的算法提要
1.Master给Application分配对应的 Worker上的 Executor (分发算法)
2.DAGScheduler 将 Job 划分为对应的 Stage , 每一个Stage 由 一个TaskSet 组成 (划分算法)
3.TaskScheduler 将 TaskSet 里面的每一个 Task 分发到对应的已经注册的 Executor上 (分发算法)
4.剩余的 ShuffleTask 中, Shuffle 中的调优的模式儿 ———— 待学习
三:核心对象的从属关系
Job ——》 Stage = TaskSet ——》 Task
Task = TaskRunner
Stage = ShuffleTask、ResultTask
SparkContext ——》 DAGScheduler + TaskScheduler
SparkRDD ——》partition
四:图表
(1)SparkContext Init
(2)Spark Job Process