Spark提交作业运行过程
2016-09-11 16:33
225 查看
背景
最近在学习Spark源码方面的知识,在这里大概了解了Spark整体的运行过程,从初始化到最终的底层运行。今天在这里进行详细的记录一下。一边以后的回顾和学习。Spark程序运行整体流程
当SparkContext初始化完之后,我们通常会使用它来读取外部的数据,使之形成RDD。然后我们会经过一些列的RDD操作之后,到最后一个Action操作。从而触发了Job的提交。在Spark中RDD操作分为两种:转换和Action操作。因为RDD是lazy模式操作。只有Action会触发Job的提交。在RDD的Action操作API的底层,其实是调用SparkContext的runJob方法,来进行Job的提交。如果你好奇的话,可以去看看源码。然后SparkContext的runJob方法中,调用的是DAGScheduler中的runJob方法。DAGSchduler中runJob方法内部调用它的内部方法submitJob方法。该方法会发送一个JobSubmit消息到内部的Actor中。内部Actor在接受到JobSubmit消息后,就会创建一个finalStage类。然后调用submitStage方法。该方法会首先进行stage的划分,在划分stage的时候,会为每个stage创建一个id号,值越大的stage,会先进行执行。。然后当一个stage没有父stage的时候,开始执行。执行完了之后,开始执行子stage。以此循环向下执行。1. SparkConf
我们在写Spark程序的时候,一般会先定义一个SparkConf,该类是Spark的配置类,里面会配置Spark程序执行运行时的参数,它其实内部就是一个ConcurrentHashMap.通过键值对的方式,来保存相应的参数。它必须设置程序运行的名称。如果你没有进行配置AppName的话,会提示出相应的异常信息。2.SparkContext
SparkContext相当于整个Spark 程序最重要的类了。它就相当于Spark程序的引擎和入口。在它进行初始化的时候,其内部会初始化其他的一些类。比如创建启动DAGScheduler和TaskScheduler,SchdulerBackend等等。3.DAGScheduler
该类最重要的功能就是划分stage,每个stage对应一个任务集,由TaskScheduler来进行任务集的提交。4.TaskScheduer
当TaskScheduler进行任务集的提交的时候,会为每个TaskSet创建一个TaskSetManager。TaskSetManager负责任务集的执行。TaskScheduler会向SchedulerBackend申请资源,然后给TaskSetManager使用。5.BlockManager
存储模块管理。在Driver段和每个Executor上都会有一个BlockManager,Dirver上的BlockManager主要负责所有Executor上的BlockManagerInfo统一管理。每个Executor上的BlockManager只会负责对应节点上的数据元信息。通过与Driver段的BlockManagerMasterActor通信,可以获取别的节点的数据元信息。相关文章推荐
- Spark on YARN集群模式作业运行全过程分析
- Spark源码系列(一)spark-submit提交作业过程
- spark-submit提交作业过程
- Spark-Submit提交作业过程
- Spark on YARN客户端模式作业运行全过程分析
- 提交jar作业到spark上运行
- Spark on YARN cluster & client 模式作业运行全过程分析
- Spark on YARN client模式作业运行全过程分析
- Spark源码系列(一)spark-submit提交作业过程
- Spark源码系列(三)作业运行过程
- Spark on YARN客户端模式作业运行全过程分析
- Spark提交作业的流程以及作业是如何被触发在集群中运行的
- Spark源码系列(一)spark-submit提交作业过程
- spark源码分析之DAGScheduler提交作业(job)过程、stage阶段说明
- Spark源码系列(一)spark-submit提交作业过程
- Spark提交作业运行原理及其参数设置
- Spark源码系列(一)spark-submit提交作业过程
- Spark作业的Stage划分,Task创建分发一直到提交给Spark的Executor的线程池执行全过程
- Spark源码系列(一)spark-submit提交作业过程
- Hue中spark 实现提交运行源码过程