深入Spark内核:任务调度(1)-基本流程
2015-04-08 14:14
288 查看
SparkContext是Spark应用的入口并负责和整个集群的交互,创建RDD,累积量(accumulators variables)和广播量(broadcast variables)等,
理解spark的任务调度基本流程,就需要从SparkContext开始。下图是官网Spark的架构图:
DriverProgram即用户提交的程序定义并创建了SparkContext的实例,SparkContext会根据RDD对象构建DAG图,然后将作业(job)提交(runJob)给DAGScheduler。
DAGScheduler对作业的DAG图进行切分成不同的stage<stage是根据shuffle为单位进行划分>,每个stage都是任务的集合(taskset)并以taskset为单位提交(submitTasks)给TaskScheduler。
TaskScheduler通过TaskSetManager管理任务(task)并通过集群中的资源管理器(Cluster Manager)<standalone模式下是Master,yarn模式下是ResourceManager>把任务(task)发给集群中的Worker的Executor, 期间如果某个任务(task)失败, TaskScheduler会重试,TaskScheduler发现某个任务(task)一直未运行完成,有可能在不同机器启动同一个任务(task),哪个任务(task)先运行完就用哪个任务(task)的结果。无论任务(task)运行成功或者失败TaskScheduler都会向DAGScheduler汇报当前状态,如果某个stage运行失败,TaskScheduler会通知DAGScheduler可能会重新提交任务。
Worker接收到的是任务(task),执行任务(task)的是进程中的线程,一个进程中可以有多个线程工作进而可以处理多个数据分片,执行任务(task)、读取或存储数据。
DAGScheduler - graph of stages RDD partitioning pipeline高级的调度器,面向stage的调度(stage-oriented scheduling),为每个job的不同stage计算DAG,跟踪哪些RDD和stage被物化并且发现运行job的最小的调度策略。TaskScheduler是可插拔的低级别任务调度器,由TaskSchedulerImpl实现TaskScheduler具体功能,管理Task级别的以及集群交互,
一个TaskScheduler只为一个SparkContext实例服务。接下来,我们将深入DAGScheduler、TaskScheduler和Worker的源码详解来逐步揭开它们神秘的面纱。
理解spark的任务调度基本流程,就需要从SparkContext开始。下图是官网Spark的架构图:
DriverProgram即用户提交的程序定义并创建了SparkContext的实例,SparkContext会根据RDD对象构建DAG图,然后将作业(job)提交(runJob)给DAGScheduler。
DAGScheduler对作业的DAG图进行切分成不同的stage<stage是根据shuffle为单位进行划分>,每个stage都是任务的集合(taskset)并以taskset为单位提交(submitTasks)给TaskScheduler。
TaskScheduler通过TaskSetManager管理任务(task)并通过集群中的资源管理器(Cluster Manager)<standalone模式下是Master,yarn模式下是ResourceManager>把任务(task)发给集群中的Worker的Executor, 期间如果某个任务(task)失败, TaskScheduler会重试,TaskScheduler发现某个任务(task)一直未运行完成,有可能在不同机器启动同一个任务(task),哪个任务(task)先运行完就用哪个任务(task)的结果。无论任务(task)运行成功或者失败TaskScheduler都会向DAGScheduler汇报当前状态,如果某个stage运行失败,TaskScheduler会通知DAGScheduler可能会重新提交任务。
Worker接收到的是任务(task),执行任务(task)的是进程中的线程,一个进程中可以有多个线程工作进而可以处理多个数据分片,执行任务(task)、读取或存储数据。
DAGScheduler - graph of stages RDD partitioning pipeline高级的调度器,面向stage的调度(stage-oriented scheduling),为每个job的不同stage计算DAG,跟踪哪些RDD和stage被物化并且发现运行job的最小的调度策略。TaskScheduler是可插拔的低级别任务调度器,由TaskSchedulerImpl实现TaskScheduler具体功能,管理Task级别的以及集群交互,
一个TaskScheduler只为一个SparkContext实例服务。接下来,我们将深入DAGScheduler、TaskScheduler和Worker的源码详解来逐步揭开它们神秘的面纱。
相关文章推荐
- 深入Spark内核:任务调度(1)-基本流程
- 深入Spark内核:任务调度(3)-TaskScheduler
- 深入Spark内核:任务调度(2)-DAGScheduler
- 深入Spark内核:任务调度(4)-Task
- Spark任务调度流程
- Spark任务调度流程及调度策略分析
- [spark] 从spark-submit开始解析整个任务调度流程
- spark内核揭秘-04-spark任务调度系统个人理解
- spark内核揭秘-spark任务调度系统
- Spark Core 资源调度与任务调度(standalone client 流程描述)
- spark内核揭秘-04-spark任务调度系统个人理解
- Linux 内核--任务0的调度切换
- 游戏做任务的基本流程
- 内核中的同步与任务调度(转载)
- Spark技术内幕之任务调度:从SparkContext开始
- Spark技术内幕之任务调度:从SparkContext开始
- 【SSH进阶之路】深入源码,详解Struts基本实现流程(七)
- ucos II 内核学习之三:任务调度
- 深入理解Linux内核(1)---基本概念
- uCOS II多任务调度的启动流程