Val*_*Val 2 hadoop amazon-emr emr apache-spark
根据Spark官方文档(http://spark.apache.org/docs/latest/job-scheduling.html#configuration-and-setup),在YARN中使用"spark.dynamicAllocation"选项时,您需要:
在每个节点的yarn-site.xml中,将spark_shuffle添加到yarn.nodemanager.aux-services ...
将yarn.nodemanager.aux-services.spark_shuffle.class设置为org.apache.spark.network.yarn.YarnShuffleService
尽管AWS EMR文档说明了这一点
"..Spark Shuffle Service由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>
Run Code Online (Sandbox Code Playgroud)
并且根本没有添加"yarn.nodemanager.aux-services.spark_shuffle.class"的部分.
我对Spark/Hadoop生态系统有点新意,所以这引起了我的一些问题:
注意:我正在使用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启用,因此您实际上根本不需要执行/配置任何内容,以便在emr-4.4.0 +上使用dynamicAllocation.(一个例外是如果你启用了maximizeResourceAllocation功能.你仍然可以使用dynamicAllocation和maximizeResourceAllocation,但是你需要在创建集群时在配置中显式启用dynamicAllocation,以防止spark.executor.instances被设置为maximizeResourceAllocation,因为设置执行程序实例的数量会有效地禁用dynamicAllocation.)
顺便说一句,你说MASTER实例的yarn.nodemanager.aux-services只设置为mapreduce_shuffle是正确的,但这只是如何在EMR上设置此值的配置的工件.虽然看到这个值似乎在MASTER实例上设置错误(即缺少spark_shuffle值)会让人感到困惑,但实际上它没有任何效果,因为MASTER实例不运行NodeManager.
此外,由于spark_shuffle不存在,您对Spark回落到mapreduce_shuffle的假设是不正确的.MapReduce Shuffle Service仅由MapReduce应用程序使用,不能由Spark应用程序使用.
| 归档时间: |
|
| 查看次数: |
679 次 |
| 最近记录: |