首页 > 解决方案 > 在火花阶段动态添加机器

问题描述

我正在使用在 Azure VM 上运行的spark 独立集群版本2.3.0 。火花作业有 5 个阶段处理。我想在第 0 阶段之后添加更多机器进行计算处理。

目前,我正在检查 spark api 的阶段完成情况。

Spark 2.3.0中是否有可以启用的功能或属性?

标签: azureapache-sparkazure-virtual-machine

解决方案


在 Yarn 上的 spark 中,您可以通过以下设置启用动态分配

spark.dynamicAllocation.enabled     
spark.dynamicAllocation.minExecutors
spark.dynamicAllocation.maxExecutors
spark.dynamicAllocation.initialExecutors

如果您参考 spark 配置页面:动态资源分配 Spark 提供了一种机制,可以根据工作负载动态调整应用程序占用的资源。这意味着如果不再使用资源,您的应用程序可能会将资源返还给集群,并在以后有需求时再次请求它们。如果多个应用程序共享 Spark 集群中的资源,此功能特别有用。此功能默认禁用,在所有粗粒度集群管理器上可用,即独立模式、YARN 模式和 Mesos 粗粒度模式。

文档链接:https ://spark.apache.org/docs/2.2.0/job-scheduling.html#configuration-and-setup

使用此功能有两个要求。首先,您的应用程序必须将 spark.dynamicAllocation.enabled 设置为 true。其次,您必须在同一集群中的每个工作节点上设置外部 shuffle 服务,并在您的应用程序中将 spark.shuffle.service.enabled 设置为 true。

我不确定在 Azure 上处理这件事有多容易,这里有一个关于 EMR 上的动态资源的问题,与 EMR 没有直接关系,但可以帮助您进行搜索。 使用 Amazon 的“maximizeResourceAllocation”设置的 Spark + EMR 不使用所有核心/vcore


推荐阅读