Spark的运行基本流程以及任务调度机制

1.Spark yarn-Cluster 的任务调度流程

	Cluster 模式用于监控和调度的 Driver 模块启动在 Yarn 集群中执行,一般用于生产环境当中。

在这里插入图片描述

  1. Yarn-cluster 模式下,client 任务提交之后之后(spark-summit 脚本),和 RM 通讯申请启动 ApplicationMaster;
  2. 随后 RM 分配 container ,在合适的NodeManager 上启动 ApplicationMaster,此时 ApplicationMaster 就是 Driver;
  3. Driver 启动后向 RM 申请 excutor 内存,rm 接到 driver 的 applicationmaster 的资源申请后会分配 container,然后在合适的 NodeManager 上启动 excutor 进程;(什么是合适的?)
  4. Excutor 进程启动后会向 Driver 进行反向注册(内部通信时 excutorBackend 向 ),excutor 全部注册完成后Driver 开始执行 main()函数;
  5. 之后执行到 Action 算子时,触发一个 job,并根据 宽依赖开始划分 stage, 每个 stage 生成对应的 taskset,之后将 task 分发到各个 excutor 上执行。
一个Spark 应用程序中包括 Job、Stage、以及 task 三个概念
  • Job: 是以 Action 算子为界,遇到一个 Action 方法则触发一个 job
  • Stage: 是 job 的子集,以 RDD 的宽依赖(shuffle)为界,分区数是多少,则有多少 task
  • task 是 Stage 的子集,以并行度(分区数)来衡量,分区数是多少,则有多少 task.

Spark 的任务调度分两路进行,或则从可以分为两个粒度上进行,一个是Stage 级的调度,一个 Task 级的调度

在这里插入图片描述
Stage 级别的调度

  • 1、启动:用户程序启动 SparkContext,是程序的总入口,进行相应的初始化,初始化启动 DAGsheduler(作业调度)、TaskSheduler(任务调度),Dagscheduler 还会初始化 一个schedulerBackend 配合 taskscheduler 完成具体任务的资源调度。
  • 2、生成作业:Dagscheduler 根据 shuffleDependency 将作业划分为不同的stage, ,根据 rdd 之间依赖关系, 将依赖划分为 宽依赖和窄依赖,划分原则就是遇见窄依赖就放进当前的stage,遇到宽依赖就断开连接,再每一个 stage 内部都会划分一个taskset,也就是数据集,而 Dagschedule 的下一个任务就是将 taskset 传给 Taskschedule,任务集taskset会触发构建一个 TaskSetManager 来管理这个任务集的周期,负责任务的调度。至此,Dagschedule 的阶段的提交结束
  • (在最后一个 stage 划分结束,就会触发作业的提交).
    Task 级别的调度
  • 3、提交任务集:Taskschedule 分配 task 到哪一个 excutor 上去执行,ScheduleBackend 配合 taskSchedule 完成具体任务的资源调度。(至于提交到那个excutor ,是位置相关的,采取最近原则,对应分区数据存在 内存->excutor 的磁盘->同一个机架上 -> 同一个机房中)
  • 4、任务的执行: Excutor :实际任务的运行最终都是在 excutor 内执行,对每一个任务创建一个 taskRunner,交给线程去运行。
  • 5、状态的监控:主要是 TaskScheduler 通过一些回调函数通知 DAGscheduler 具体的 excutor 的生命状态。
  • 6、任务结果的获取:对于 FinalStage 返回运算结果的本身,对于其他 stage,返回 Dagscheduler 一个MapStatus ,维护着中间输出结果和 block 的地址,存储位置信息将会作为下一个阶段任务输入数据的依据。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值