首页 > 解决方案 > Application Master 或 Cluster Manager 是否启动容器/执行程序 - Spark?

问题描述

假设我们有一个在集群模式下运行的 spark 作业,其中集群管理器是 YARN。

在集群模式下

  1. 用户向集群管理器提交预编译的 JAR、Python 脚本。集群管理器然后告诉特定节点管理器启动应用程序主控。
  2. 然后 Spark 驱动程序在 Application Master 上运行。驱动程序将包含转换和操作的用户代码转换为称为 DAG 的逻辑计划。然后将 DAG 转换为物理执行计划
  3. 然后,应用程序主控器与集群管理器通信并协商资源。请求诸如首选执行器位置和容器数量等资源。

此时是集群管理器分配 YARN 容器还是应用程序主机分配 YARN 容器?集群管理器是否也创建了 Spark 执行器,或者应用程序主控器是否这样做?

标签: apache-spark

解决方案


  1. 提交给 YARN 的 Spark 应用程序将转换为 YARN
    应用程序。
  2. 因此,当客户端向资源管理器(Yarn 组件)提交新的应用程序/作业请求时。
  3. 资源管理器 (RM) 接受作业请求并分配一个
    容器来为给定的应用程序/作业启动 Application Master。
    Application Master 可以被认为是一个专门的容器,
    它将管理/监视应用程序/作业任务。
  4. Application Master 向 Resource Manager 发送请求,请求
    运行应用程序/作业所需的资源。
  5. 资源管理器返回一个容器
    列表以及可以在其上生成的辅助节点列表。

  6. Application Master在每个指定的辅助节点上启动容器(在 spark 称为执行器的情况下)。

首先要了解的事实是:每个 Spark 执行器都作为 YARN 容器运行。这一点以及应用程序的 Spark 执行程序是固定的,分配给每个执行程序的资源也是固定的,Spark 应用程序在其整个持续时间内占用资源。这与 MapReduce 应用程序相反,后者在每个任务结束时不断返回资源,并在下一个任务开始时再次分配。


推荐阅读