【Spark】Spark 运行架构--YARN-Cluster

本文详细解析了Spark在YARN-Cluster模式下的工作流程,包括客户端提交、YARN分配资源、ApplicationMaster初始化SparkContext、Executor的启动与任务执行,以及程序结束时的资源释放。重点介绍了YARN-Cluster模式与Client模式的区别,强调了SparkContext在AM中的运行。
摘要由CSDN通过智能技术生成

本篇结构:

  • YARN-Cluster 工作流程图
  • YARN-Cluster 工作流程
  • YARN-Cluster 模式启动类图
  • YARN-Cluster 实现原理
  • YARN-Cluster 作业运行调用图

一、YARN-Cluster 工作流程图

二、YARN-Cluster 工作流程

  1. 客户端通过 spark-submit 提交应用程序,反射生成 YarnClusterApplication,在其 start 方法中构造 Client,并调用 Client.run 向 YARN 中提交程序,包括 ApplicationMaster 的命令、提交给 ApplicationMaster 的程序和需要在 Executor 中运行的程序等。
  2. ResourceManager 收到请求后,在集群中选择一个 NodeManager,分配第一个 Container,并在 Container 中启动应用程序的 ApplicationMaster,其中 ApplicationMaster 进行 SparkContext 的初始化。
  3. ApplicationMaster 向 ResourceManager 注册,这样用户可以直接通过 ResourceManager 查看应用程序的运行状态,然后它将采用轮询的方式为各个任务申请资源,并监控它们的运行状态直至结束。
  4. 如果 ApplicationMaster 申请到资源(Container)后,便与对应的 NodeManager 进行通信,要求其在 Container 中启动 CoarseGrainedExecutorBackend,CoarseGrainedExecutorBackend 启动后和 Standalone 模式一样向 SparkContext 注册,只不过这里的 SparkContext 运行在 ApplicationMaster 中,注册后,CoarseGrainedExecutorBackend 等待分配任务执行。
  5. AM 中的 SparkContext 分配任务集给 CoarseGrainedExecutorBackend ,提交任务是在 YarnClusterScheduler 中,具体资源的协商是在 CoarseGrainedSchedulerBackend(YarnClusterSchedulerBackend) 中。CoarseGrainedExecutorBackend 运行任务并向 SparkContext 的 DriverEndpoint 汇报运行状态和进度,如果失败,以便进行重试。
  6. 程序结束后,AM 向 RM 申请注销并关闭。

三、YARN-Cluster 模式启动类图

四、YARN-Cluster 实现原理

  1. 和 Client 模式不同,Cluster 模式在 SparkSubmit 的 runMain 方法中创建的 SparkApplication 不同,Client 创建的是包装 mainClass(也即通过 --class 参数传递的主类)的 JavaMainApplication,而 Cluster 模式创建的是 SparkApplication(YARN-Cluster 中是 YarnClusterApplication)。

    val app: SparkApplication = if (classOf[SparkApplication].isAssignableFrom(mainClass)) {
      mainClass.newInstance().asInstanceOf[SparkApplication]
    } else {
      // SPARK-4170
      if (classOf[scala.App].isAssignableFrom(mainClass)) {
        printWarning("Subclasses of scala.App may not work correctly. Use a main() met
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值