【发布时间】:2019-02-19 08:50:17
【问题描述】:
我想更好地了解 YARN 和 Spark 之间的通信交换。 例如:
- 从触发 Spark 作业到 YARN 分配资源会发生什么?
- 当 Spark 作业请求的资源超过 YARN 可用的资源时会发生什么?
- 当 Spark 作业请求的资源超过集群容量时会发生什么?
【问题讨论】:
标签: apache-spark hadoop-yarn hortonworks-data-platform cloudera-cdh
我想更好地了解 YARN 和 Spark 之间的通信交换。 例如:
【问题讨论】:
标签: apache-spark hadoop-yarn hortonworks-data-platform cloudera-cdh
在 Yarn 客户端模式下运行 spark-submit 时完成的步骤 -
Spark 驱动程序内部调用Client 类submitApplication 方法。这会将 Spark 应用程序提交到 YARN 集群(即 YARN ResourceManager)并返回应用程序的 ApplicationId。
之后,spark使用步骤1中生成的application_id,调用createContainerLaunchContext方法。此方法为 YARN NodeManager 创建一个 YARN ContainerLaunchContext 请求以启动 ApplicationMaster(在容器中)。
第 2 步负责为应用程序启动 ApplicationMaster。如果集群没有资源来启动 AM,那么它将失败并且驱动程序将异常关闭。一旦 AM 启动并运行,它会联系驱动程序并确认它已启动。此时,spark yarn 应用程序已启动并正在运行。
在此驱动程序向 AM 请求资源(执行程序)后,AM 向 Yarn ResourceManager 请求相同的资源。
如果纱线没有那么大的容量,它将为 Spark 应用程序提供任何可能的东西。如果它有容量,它会提供任何要求的东西。
更多细节在这里 - https://jaceklaskowski.gitbooks.io/mastering-apache-spark/yarn/spark-yarn-client.html
【讨论】: