Spark应用运行流程

相关基本术语

Application:应用,即用户需要完成的应用程序。一般来说,这部分代码需要用户根据自己的需求来完成。这部分代码主要包括两部分:Driver和Executor。
Driver:顾名思义,驱动者,为Application准备运行环境,驱动并监控Application的运行。
Worker:当SparkContext申请到资源后,就会确定此应用程序在Cluster的哪些节点运行。运行Application的这些节点就叫做Worker。在并行计算中一个Application中会有多个Worker同时运行。
Executor:顾名思义,执行者。其实就是运行在Worker中的一个进程,负责此Worker上的Task的运行以及数据存储(内存或磁盘)。
Job:作业。多个并行计算的Task的集合,并且包含多个RDD及作用于相应RDD上的各种操作。
Stage:阶段。每个Job会被拆分成很多组Task。每组Task被称为Stage,所以TaskSet是Stage的表现形式。
Task:任务。它是在Worker上执行的最小单元。
在这里插入图片描述

Spark运行流程

在这里插入图片描述
(1)构建Spark Application的运行环境。创建SparkContext后,SparkContext向资源管理器注册并申请资源。这里说的资源管理器有Standalone、Messos、YARN等。事实上,Spark和资源管理器关系不大,主要是能够获取Executor进程,并能保持相互通信。在SparkContext初始化过程中,Spark分别创建作业调度模块DAGScheduler和任务调度模块TaskScheduler(此例为Standalone模式下,在YARN-Client模式下任务调度模块为YarnClientClusterScheduler,在YARN-Cluster模式下为YarnClusterScheduler)。

(2)资源管理器根据预先设定的算法,在资源池里分配合适的Executor运行资源。在运行过程中,Executor运行情况将随着心跳信息发送到资源管理器上。考虑到Spark Application运行过程中SparkContext和Executor之间有大量信息的交换,提交Spark Context的Client应该靠近Worker节点,以方便信息传输。

(3)SparkContext构建DAG图(Directed Acyclic Graph,有向无环图),作业调度模块DAGScheduler将DAG图分解成Stage。DAGScheduler决定了运行Task的理想位置,并把这些信息连同Task本身传递给下层的TaskSchduler。

(4)Executor向SparkContext申请Task,告诉SparkContext,“我已经准备好了,请给我分配任务吧”。

(5)TaskScheduler维护所有TaskSet,当Driver收到Executor心跳时,TaskScheduler会根据其资源剩余情况分配相应的Task到Executor运行,同时SparkContext将应用程序代码发送给Worker,随后Task便开始在Worker上运行。在此期间,TaskScheduler还维护着所有Task的运行状态,重试失败的Task。如果Task失败是因为Shuffle数据丢失而引起的,则DAGScheduler需要重新提交运行之前的Stage;如果Shuffle数据没有丢失,则交给TaskScheduler处理。

(6)当Task运行结束后,反馈给SparkContext,并释放资源。

原文:https://blog.csdn.net/xu__cg/article/details/70037933

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值