Spark提交作业运行过程

背景

最近在学习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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值