Spark spark.shuffle.memoryFraction没有任何影响

时间:2015-07-19 20:57:06

标签: python amazon-web-services apache-spark emr

我正在使用Python和Spark附带的基本wordcount example在Amazon EMR上测试Spark。

运行应用程序后,我意识到在第0阶段reduceByKey(添加)中,大约2.5GB shuffle溢出到内存,4GB shuffle溢出到磁盘。因为在wordcount示例中我不缓存或持久化任何数据,所以我认为我可以通过提供更多的shuffle memoryFraction来提高此应用程序的性能。所以,在spark-defaults.conf中,我添加了以下内容:

spark.storage.memoryFraction    0.2
spark.shuffle.memoryFraction    0.6

但是,我仍然获得相同的性能,并且相同数量的随机数据正在溢出到磁盘和内存。我验证了Spark正在使用Spark UI / Environment读取这些配置,我可以看到我的更改。此外,我尝试将spark.shuffle.spill设置为false,我得到了我正在寻找的性能,并且所有的shuffle数据都只溢出到内存中。

那么,我在这里出错了什么,为什么不利用额外的shuffle内存部分?

我的环境:
运行使用-x参数的Spark 1.3.1的Amazon EMR 1主节点:m3.xlarge
3核心节点:m3.xlarge
应用:wordcount.py
输入:存储在S3中的10个.gz文件各90MB(未经存档350MB) 提交命令:

/home/hadoop/spark/bin/spark-submit --deploy-mode client /mnt/wordcount.py s3n://<input location>

spark-defaults.conf:

spark.eventLog.enabled          false
spark.executor.extraJavaOptions -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=70 -XX:MaxHeapFreeRatio=70
spark.driver.extraJavaOptions   -Dspark.driver.log.level=INFO
spark.master                    yarn
spark.executor.instances        3
spark.executor.cores            4
spark.executor.memory           9404M
spark.default.parallelism       12
spark.eventLog.enabled          true
spark.eventLog.dir              hdfs:///spark-logs/
spark.storage.memoryFraction    0.2
spark.shuffle.memoryFraction    0.6

0 个答案:

没有答案