gpt4 book ai didi

hadoop - spark.dynamicAllocation 的 EMR 配置与 Spark 官方文档不匹配

转载 作者:可可西里 更新时间:2023-11-01 14:43:41 26 4
gpt4 key购买 nike

根据官方 Spark 文档 ( http://spark.apache.org/docs/latest/job-scheduling.html#configuration-and-setup ),在 YARN 中使用“spark.dynamicAllocation”选项时,您需要:

In the yarn-site.xml on each node, add spark_shuffle to yarn.nodemanager.aux-services ...

set yarn.nodemanager.aux-services.spark_shuffle.class to org.apache.spark.network.yarn.YarnShuffleService

尽管 AWS EMR 文档说,

"..Spark Shuffle Service is automatically configured by EMR. (http://docs.aws.amazon.com/ElasticMapReduce/latest/ReleaseGuide/emr-spark-configure.html)

我注意到,EMR 节点上“yarn-site”中的“yarn.nodemanager.aux-services”设置为:

<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle,</value>
</property>

并且根本没有添加“yarn.nodemanager.aux-services.spark_shuffle.class”部分。

我对 Spark/Hadoop 生态系统有点陌生,所以这在我脑海中提出了几个问题:

  • 为什么我仍然能够在“spark.dynamicAllocation”设置为“true”的情况下成功运行 Spark 作业,但不满足基本配置要求?这是否意味着 Spark 可以以某种方式使用“mapreduce_shuffle”作为后备?
  • 如果上述假设(Spark 回退到“mapreduce_shuffle”)为真,使用不正确的 shuffle 类(“mapreduce_shuffle”映射到“org.apache.hadoop.mapred.ShuffleHandler”是否可能对性能(其他?)产生影响类(class))?

注意:我使用的是 emr-ami v. 4.6.0

最佳答案

yarn.nodemanager.aux-services 属性只需要在运行 YARN NodeManager 的节点上设置,在 EMR 上只有 CORE/TASK 实例而不是 MASTER 实例(除非它是单节点集群).

在 EMR 上,yarn.nodemanager.aux-services 和 yarn.nodemanager.aux-services.spark_shuffle.class 属性确实在 CORE/TASK 实例上正确设置,但不是在 MASTER 实例上,因此 AWS EMR 文档是正确的因为启用 dynamicAllocation 所需要做的就是设置 spark.dynamicAllocation.enabled=true(在创建集群时或通过 spark-submit 选项为单个应用程序设置)。

事实上,从 emr-4.4.0 开始,dynamicAllocation 已默认启用,因此您实际上根本不需要执行/配置任何操作即可在 emr-4.4.0+ 上使用 dynamicAllocation。 (一个异常(exception)是如果您启用了 maximizeResourceAllocation 功能。您仍然可以将 dynamicAllocation 与 maximizeResourceAllocation 一起使用,但是您需要在创建集群时在配置中显式启用 dynamicAllocation 以防止 spark.executor.instances 被设置maximizeResourceAllocation,因为设置执行器实例的数量会有效地禁用 dynamicAllocation。)

顺便说一下,您说 MASTER 实例确实将 yarn.nodemanager.aux-services 仅设置为 mapreduce_shuffle 是正确的,但这只是在 EMR 上如何设置此值的配置的产物。尽管在 MASTER 实例上看到此值似乎设置不正确(即缺少 spark_shuffle 值)可能会让人感到困惑,但它实际上没有任何效果,因为 MASTER 实例不运行 NodeManager。

此外,您关于 Spark 回退到 mapreduce_shuffle 的假设是不正确的,因为 spark_shuffle 不存在。 MapReduce Shuffle Service 仅供 MapReduce 应用程序使用,不能供 Spark 应用程序使用。

关于hadoop - spark.dynamicAllocation 的 EMR 配置与 Spark 官方文档不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38211901/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com