spark的通用执行流程

spark的通用执行流程

​ 1.集群启动后,Worker向Master节点心跳汇报资源(CUP Core 和Memory)情况;

​ 2.Client提交Application,根据不同的运行模式在不同的位置创建Driver进程;

​ 3.SparkContext连接到Master,向Master注册应用并申请资源(Executor 的CPU Core和Memory);

​ 4.Master根据SparkContext的资源申请并根据Worker心跳周期报告的信息决定在哪个Worker上资源分配,也就是Executor;

​ 5.Worker节点创建Executor进程,Exector进行反向注册;

​ 6.资源满足后(Exector注册完毕),SparkContext解析Application代码,创建RDD,构建DAG,并提交给DAGScheduler分解成Stage(当碰到Action算子时,就会催生job,每个job中含有1个或多个Stage),然后将Stage(或者称为TaskSet)提交给TaskScheduler,TaskScheduler负责将Task分配到相应的Worker,最后提交给Executor执行(发送到Exector的线程池中);

​ 7.每个 Executor 会持有一个线程池,Executor 通过启动多个线程(Task)来对 RDD 的 Partition 进行并行计算,并向SparkContext 报告,直至 Task 完成。

​ 8.所有 Task 完成后,SparkContext 向 Master 注销,释放资源。

任务失败的情况处理如下

​ 1.Task 在 Executor 线程池中的运行情况会向 TaskScheduler 反馈,当 Task 执行失败时,会由 TaskScheduler 负责重试,将 Task 重新发送给 Executor 去执行,默认重试 3 次。如果重试 3 次依然失败,那么这个 Task 所在的 Stage 就失败了。

​ 2.Stage 失败了会由 DAGScheduler 来负责重试,会重新发送 TaskSet 到 TaskScheduler,Stage 默认重试 4 次。如果重试 4次以后依然失败,那么这个 Job 就失败了。Job 失败则 Application 提交失败。

​ 3.TaskScheduler 不仅能重试失败的 Task,还会重试 Straggling(落后,缓慢)的 Task(也就是执行速度比其他 Task 慢太多的Task)。如果有运行缓慢的 Task 那么 TaskScheduler 会启动一个新的 Task 来与这个运行缓慢的 Task 执行相同的处理逻辑。两个 Task 哪个先执行完,就以哪个 Task 的执行结果为准。这就是 Spark 的推测执行机制。在 Spark 中推测执行默认关闭的。推测执行可以通过 spark.speculation 属性来配置。

YARN Cluster

在 YARN-Cluster 模式中,当用户向 YARN 中提交一个应用程序后,YARN 会分两个阶段运行该应用程序:

​ 第一个阶段是把 Spark 的 Driver 作为一个 ApplicationMaster 在 YARN 集群中先启动;

​ 第二个阶段是由 ApplicationMaster 创建应用程序,然后为它向 ResourceManager 申请资源,并启动 Executor 来运行Task,同时监控它的整个运行过程,直到运行完成。

​ 具体流程如下:

​ 1. YARN Cluster 模式下,Driver 运行在 ApplicationMaster 。程序启动后会和 ResourceManager 通讯申请ApplicationMaster

​ 2.ResourceManager 收到请求后,通过 ResourceScheduler 选择一台 NodeManager 分配一个 Container,在 Container 中开

启 ApplicationMaster 进程;同时在 ApplicationMaster 中初始化 Driver;

​ 3.ApplicationMaster 向 ResourceManager 注册,这样用户可以直接通过 ResourceManage 查看应用程序的运行状态,然后

它将采用轮询的方式通过 RPC 协议为各个任务申请资源,并监控它们的运行状态直到运行结束;

​ 4.一旦 ApplicationMaster 申请到资源(也就是 Container)后,便与对应的 NodeManager 通信,在 NodeManager 的

Container 中启动 CoarseGrainedExecutorBackend,CoarseGrainedExecutorBackend 启动后会向 Driver 中的 SparkContext

反向注册并申请 Task。这一点和 Standalone 模式一样,只不过 SparkContext 在 Spark Application 中初始化时,使用

CoarseGrainedSchedulerBackend 配合 YarnClusterScheduler 进行任务的调度,其中 YarnClusterScheduler 只是对

TaskSchedulerImpl 的一个简单包装,增加了对 Executor 的等待逻辑等;

​ 5.ApplicationMaster 中的 SparkContext 分配 Task 给 CoarseGrainedExecutorBackend 执行,CoarseGrainedExecutorBackend

运行 Task 并向 ApplicationMaster 汇报运行的状态和进度,方便 ApplicationMaster 随时掌握各个任务的运行状态,从而

可以在任务失败时重新启动任务;

​ 6.应用程序运行完成后,ApplicationMaster 向 ResourceManager 申请注销并关闭自己。

​ 7.该模式下只能通过 YARN 查看日志。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值