image.png

步骤

  • 1、Spark Yarn Client 向 Yarn 中提交应用程序。
  • 2、ResourceManager 收到请求后,在集群中选择一个 NodeManager,并为该应用程序分配一个 Container,在这个 Container 中启动应用程序的 ApplicationMaster, ApplicationMaster 进行 SparkContext 等的初始化。
  • 3、ApplicationMaster 向 ResourceManager 注册,这样用户可以直接通过 ResourceManager 查看应用程序的运行状态,然后它将采用轮询的方式通过RPC协议为各个任务申请资源,并监控它们的运行状态直到运行结束。
  • 4、ApplicationMaster 申请到资源(也就是Container)后,便与对应的 NodeManager 通信,并在获得的 Container 中启动 CoarseGrainedExecutorBackend,启动后会向 ApplicationMaster 中的 SparkContext 注册并申请 Task。
  • 5、ApplicationMaster 中的 SparkContext 分配 Task 给 CoarseGrainedExecutorBackend 执行,CoarseGrainedExecutorBackend 运行 Task 并向ApplicationMaster 汇报运行的状态和进度,以让 ApplicationMaster 随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务。
  • 6、应用程序运行完成后,ApplicationMaster 向 ResourceManager申请注销并关闭自己。

Resourcemanager

  • 处理客户端请求
  • 启动/监控ApplicationMaster
  • 监控NodeManager
  • 资源分配与调度

    Nodemanger

  • 单个节点上的资源管理和任务管理

  • 处理来自ResourceManager的命令
  • 处理来自ApplicationMaster的命令

    ApplicationMaster

  • 数据切分

  • 为应用程序申请资源,进一步分配给内部任务
  • 任务监控和容错

    Container

  • 任务运行资源(节点,cpu,内存)

  • 任务启动命令
  • 任务运行环境