所以,我试图用三个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内存?
答案 0 :(得分:1)
您实际上已成功设置spark.executor.memory
。 Spark计算存储内存的方式大约为.54 * spark.executor.memory
,在您的情况下约为5.5g。
C.f。,this
此外,您spark.yarn.executor.memoryOverhead
的价值似乎是错误的。这是一个以mb为单位的数字,因此0.2
没有多大意义。