为了账号安全,请及时绑定邮箱和手机立即绑定

Spark 作业执行

标签:
Spark

Spark基本组件,Master和Worker,负责运行Client和Driver

webp

作业执行框架

每个SparkApplication由主控节点Master、集群资源管理节点ClusterManager、执行任务节点Worker和执行单元Executor、负责提交作业的Client、负责作业控制的Driver组成的

SparkContext是应用程序和集群交互的唯一通道,包括:获取数据、交互操作、分析和构建DAG图、通过Scheduler调度任务、Block跟踪、Shuffle跟踪

提交作业有两种方式
Driver运行在集群中和运行在客户端,无论哪种方式,概念是一致的
Stage(根据Shuffle划分Stage)
Task(一个Stage包含多个Task,实现并行)
DAGScheduler(将作业分解成Stage,执行Task数量,生成TaskSet放到TaskScheduler)

基于Standalone模式

webp

各进程角色如下
Master:主控节点,接收Client提交的作业,管理Worker,命令Worker启动Driver和Executor
Worker:Slave节点,管理节点上的资源,定期向Master心跳汇报,接收Master命令
Client:客户端进程,提交作业到Master
Driver:Spark作业的主进程,负责DAG构建、Stage划分、Task管理和调度,包含多个组件
Executor:执行作业,一个Executor可以执行多个Task,每个Worker只能启动一个Executor

webp

作业执行流程

客户端提交应用程序给Master,指定一个Worker启动Driver,然后让其他Worker启动Executor,由Driver触发Executor启动Task执行

故障解决方案
Worker故障
Worker退出前会将Worker上的Executor杀掉,Master可以通过心跳感应到Worker故障,通知给Driver移除Worker节点

Executor故障
ExecutorRunner汇报给Worker,传递给Master,Master发送LanuchExecutor指令给Worker重新启动Executor

Master故障
通过Zookeeper搭建Master的HA,一个作为Active,其他作为Standby,Active节点故障能够及时切换

基于YARN模式

webp

SparkAppMaster相当于Driver

webp

作业执行流程

客户端生成作业信息,提交给ResourceManager,在与NodaManager通信时把AppMaster分配给NodeManager,启动SparkAppMaster。初始化作业并向ResourceManager申请资源后SparkAppMaster通过RPC让NodeManager启动相应的SparkExecutor。SparkClient通过AppMaster获取作业运行状态

作业调度

整个作业调度分为:生成RDD对象、构建DAGScheduler、任务调度、作业执行

webp

调度框架

  1. 生成RDD对象,根据输入RDD进行解析,构建DAG图。代码中的RDD进行转换操作是惰性的,只会产生标记不会立即执行。只有遇到执行操作时调用runJob方法提交至DAGScheduler,程序真正执行

  2. 构建DAGScheduler过程中,根据DAG划分Stage,提交任务集。首先将DAG划分成一个完整的Stage,从最后一个RDD往前回溯,不断判断RDD的依赖关系,如果是窄依赖则继续回溯,宽依赖则划分出一个新的Stage

  3. 任务调度过程中,通过集群管理器分配资源启动具体任务,并重试失败或运行较慢的任务

  4. 作业执行过程,执行任务,存储并管理数据块



作者:Alex90
链接:https://www.jianshu.com/p/e3e5753fe7f0


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消