Spark提交作业运行过程

来源:互联网 发布:celery python廖雪 编辑:程序博客网 时间:2024/05/17 01:14

背景

最近在学习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通信,可以获取别的节点的数据元信息。

0 0
原创粉丝点击