EMR上的pyspark代码与非默认spark.executor.memory设置没有生效?

时间:2016-07-17 23:53:07

标签: pyspark yarn amazon-emr

所以,我试图用三个m4.2xlarge实例(一个主节点和两个核心节点)在EMR上运行我的火花代码。

每台机器都有32GB内存。我一直遇到这个错误:

16/07/17 23:32:35 WARN TaskSetManager: Lost task 5.0 in stage 3.0 (TID 41, ip-172-31-55-189.ec2.internal): ExecutorLostFailure (executor 2 exited caused by one of the running tasks) Reason: Container killed by YARN for exceeding memory limits. 5.8 GB of 5.5 GB physical memory used. Consider boosting spark.yarn.executor.memoryOverhead.

为了提升内存,我在创建conf之前在Spark代码中使用了以下SparkContext设置。

conf.set('spark.executor.instances', 2)
conf.set('spark.executor.cores', 2)
conf.set('spark.executor.memory', '12g')
conf.set('spark.yarn.driver.memoryOverhead', '0.2')
sc = SparkContext(conf=conf)

然而,我仍然得到相同的错误,表明每个执行程序增加的内存没有生效。知道我做错了什么以及如何在每个核心实例上的两个任务之间分配32GB内存?

1 个答案:

答案 0 :(得分:1)

您实际上已成功设置spark.executor.memory。 Spark计算存储内存的方式大约为.54 * spark.executor.memory,在您的情况下约为5.5g。

C.f。,this

此外,您spark.yarn.executor.memoryOverhead的价值似乎是错误的。这是一个以mb为单位的数字,因此0.2没有多大意义。