如何在 运行 我的 spark 作业之前启动我的 EMR 集群中的所有节点

How to spin up all nodes in my EMR cluster before running my spark job

我有一个最多可扩展到 10 个 SPOT 节点的 EMR 集群。当不使用时,它默认为 1 CORE 节点(和 1 MASTER)以明显节省成本。所以总共它最多可以扩展到 11 个节点 1 CORE + 10 SPOT。 当我 运行 我的 spark 工作需要一段时间来启动 10 个 SPOT 节点,我的工作最终需要大约 4 小时才能完成。 我试着等到所有节点都启动,然后取消我的工作并立即重新启动它以便它可以立即开始使用最大资源,我的工作只用了大约 3 小时就完成了。

我有两个问题:

1.有没有办法让 YARN 在我开始工作之前启动所有必要的资源?我已经在作业提交期间指定了 spark-submit 参数,例如 num-executorsexecutor-memoryexecutor-cores 等。

2.我还没有做成本分析,但是做上面提到的第一个是否值得呢? AWS 是否对启动时间收费,即使工作没有进行 运行?

很想知道您的见解和建议。

谢谢

Is there a way to make YARN spin up all the necessary resources before starting my job?

不知道如何实现这个。但是,在我看来,不值得这样做。 Spark 足够智能,可以为我们做这件事。

它知道如何在集群中出现或离开更多实例时分配任务。要实现此目的,您应该了解特定的 spark 配置。

您应该将其设置为 true spark.dynamicAllocation.enabled。还有一些其他的相关配置,您可以更改或保持原样。

有关详细信息,请参阅此文档spark.dynamicAllocation.enabled

请根据您的 spark 版本查看文档。这个link是针对spark版本的2.4.0

Does AWS charge for spin up time, even when a job is not being run?

您需要为您使用实例的每一秒付费,最少一分钟。你的工作是否 运行 并不重要。 即使他们在集群中处于空闲状态,您也必须为其付费。

有关详细信息,请参阅这些 link:

EMR FAQ

EMR PRICING

希望这能让您对 EMR 定价和与动态分配相关的某些 spark 配置有所了解。

我假设您为此使用 AWS 托管扩展。如果您可以切换到自定义缩放,您可以设置更积极的缩放规则,您还可以设置每次升级和降级时要扩展的节点数,这将帮助您更快地收敛到所需的节点数。

自定义缩放的唯一缺点是触发需要 5 分钟。