emr配置与spark官方文档不匹配

z9zf31ra  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(421)

根据spark官方文件(http://spark.apache.org/docs/latest/job-scheduling.html#configuration-和设置),当对Yarn使用“spark.dynamicallocation”选项时,您需要:
在每个节点的yarn-site.xml中,将spark\u shuffle添加到yarn.nodemanager.aux-services。。。
将yarn.nodemanager.aux-services.spark\u shuffle.class设置为org.apache.spark.network.yarn.yarnshuffleservice
尽管aws emr文件说
“.spark shuffle服务由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\u shuffle.class”部分。
我对spark/hadoop生态系统有点陌生,所以这在我脑海中引发了几个问题:
为什么在“spark.dynamicalocation”设置为“true”的情况下,我仍然能够成功地运行spark作业,而基本配置要求却没有得到满足?这是否意味着spark可以使用“mapreduce\u shuffle”作为后备方案?
如果上面的假设(spark回落到“mapreduce\u shuffle”)是真的,那么使用不正确的shuffle类(“mapreduce\u shuffle”Map到“org.apache.hadoop.mapred.shufflehandler”类)是否会影响性能(其他?)?
注意:我使用的是emr ami v。4.6.0

00jrzges

00jrzges1#

yarn.nodemanager.aux-services属性只需要在运行yarn nodemanager的节点上设置,在emr上,这些节点只是核心/任务示例,而不是主示例(除非它是单节点集群)。
在emr上,yarn.nodemanager.aux-services和yarn.nodemanager.aux-services.spark\u shuffle.class属性确实在核心/任务示例上正确设置,但在主示例上没有设置,因此,aws emr文档是正确的,因为启用dynamicalocation只需将spark.dynamicalocation.enabled设置为true(无论是在创建集群时,还是通过spark提交选项为单个应用程序)。
事实上,从emr-4.4.0开始,dynamicallocation在默认情况下已经启用,因此实际上您根本不需要做/配置任何事情就可以在emr-4.4.0+上使用dynamicallocation(一个例外是,如果您启用了maximizeresourceallocation功能。您仍然可以将DynamicLocation与maximizeresourceallocation一起使用,但在创建集群时,您需要在配置中显式启用DynamicLocation,以防止maximizeresourceallocation设置spark.executor.instances,因为设置executor示例的数量会有效地禁用dynamicallocation。)
顺便说一下,您正确地说主示例确实将yarn.nodemanager.aux-services设置为mapreduce\u shuffle,但这只是在emr上如何设置此值的配置的一个工件。虽然在主示例上看到这个值似乎设置不正确(即缺少spark\u shuffle值)可能会让人困惑,但实际上它没有任何效果,因为主示例没有运行nodemanager。
另外,由于spark\u shuffle不存在,您关于spark回落到mapreduce\u shuffle的假设是不正确的。mapreduce shuffle服务仅由mapreduce应用程序使用,不能由spark应用程序使用。

相关问题