AWS Glue - 无法设置spark.yarn.executor.memoryOverhead

6
在AWS Glue中运行Python作业时,我遇到了错误:

原因:由于超过内存限制,容器被YARN终止。使用了5.6 GB的物理内存,超过了5.5 GB。考虑增加spark.yarn.executor.memoryOverhead。

在脚本开头运行此命令时:
print '--- Before Conf --'
print 'spark.yarn.driver.memory', sc._conf.get('spark.yarn.driver.memory')
print 'spark.yarn.driver.cores', sc._conf.get('spark.yarn.driver.cores')
print 'spark.yarn.executor.memory', sc._conf.get('spark.yarn.executor.memory')
print 'spark.yarn.executor.cores', sc._conf.get('spark.yarn.executor.cores')
print "spark.yarn.executor.memoryOverhead", sc._conf.get("spark.yarn.executor.memoryOverhead")

print '--- Conf --'
sc._conf.setAll([('spark.yarn.executor.memory', '15G'),('spark.yarn.executor.memoryOverhead', '10G'),('spark.yarn.driver.cores','5'),('spark.yarn.executor.cores', '5'), ('spark.yarn.cores.max', '5'), ('spark.yarn.driver.memory','15G')])

print '--- After Conf ---'
print 'spark.driver.memory', sc._conf.get('spark.driver.memory')
print 'spark.driver.cores', sc._conf.get('spark.driver.cores')
print 'spark.executor.memory', sc._conf.get('spark.executor.memory')
print 'spark.executor.cores', sc._conf.get('spark.executor.cores')
print "spark.executor.memoryOverhead", sc._conf.get("spark.executor.memoryOverhead")

我得到了以下输出:
--- 在配置之前 --- spark.yarn.driver.memory 无 spark.yarn.driver.cores 无 spark.yarn.executor.memory 无 spark.yarn.executor.cores 无 spark.yarn.executor.memoryOverhead 无 --- 配置 --- --- 在配置之后 --- spark.yarn.driver.memory 15G spark.yarn.driver.cores 5 spark.yarn.executor.memory 15G spark.yarn.executor.cores 5 spark.yarn.executor.memoryOverhead 10G
看起来像是设置了 spark.yarn.executor.memoryOverhead,但为什么它没有被识别?我仍然收到相同的错误。
我看到其他帖子中提到了设置 spark.yarn.executor.memoryOverhead 的问题,但不知道为什么在这里似乎已经设置了却无法工作?
2个回答

6
  • 打开 Glue > Jobs > 编辑你的任务 > 脚本库和任务参数(可选) > 底部附近的任务参数。

  • 设置以下内容 > 键:--conf 值:spark.yarn.executor.memoryOverhead=1024


1
这似乎对我的情况有所帮助,但是我想指出以下内容,以备将来的Spark版本使用: WARN SparkConf:自Spark 2.3起,配置键“spark.yarn.executor.memoryOverhead”已被弃用,可能会在将来被删除。请改用新键“spark.executor.memoryOverhead”。 - garromark

2
很遗憾,当前版本的Glue不支持此功能。您无法设置除使用UI以外的其他参数。在您的情况下,您可以使用AWS EMR服务而不是使用AWS Glue。
当我遇到类似的问题时,我尝试减少洗牌的数量和洗牌的数据量,并增加DPU。在解决这个问题的过程中,我参考了以下文章。希望它们对您有用。

http://blog.cloudera.com/blog/2015/03/how-to-tune-your-apache-spark-jobs-part-1/

https://www.indix.com/blog/engineering/lessons-from-using-spark-to-process-large-amounts-of-data-part-i/

https://umbertogriffo.gitbooks.io/apache-spark-best-practices-and-tuning/content/sparksqlshufflepartitions_draft.html


更新日期:2019年1月13日
亚马逊最近在AWS Glue文档中新增了一个部分,介绍如何监控和优化Glue作业。我认为这是非常有用的东西,可以帮助理解与内存问题相关的问题所在,并避免它们。

https://docs.aws.amazon.com/glue/latest/dg/monitor-profile-glue-job-cloudwatch-metrics.html


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接