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

Posted

技术标签:

【中文标题】具有非默认 spark.executor.memory 设置的 EMR 上的 pyspark 代码未生效?【英文标题】:pyspark code on EMR with non-default spark.executor.memory setting not taking effect? 【发布时间】:2016-07-17 23:53:07 【问题描述】:

所以,我尝试在 EMR 上运行我的 spark 代码,其中包含三个 m4.2xlarge 实例(一个主节点和 2 个核心节点)。

每台机器都有 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.

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

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】:

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

参考,this

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

【讨论】:

是的,看起来“分数”设置有所不同。在其他一些选项中,这也采用数值而不是 '8g' 类型的字符串。 API 中奇怪的不一致。当我将其修改为数字 8192 值时,一切正常。

以上是关于具有非默认 spark.executor.memory 设置的 EMR 上的 pyspark 代码未生效?的主要内容,如果未能解决你的问题,请参考以下文章

具有非默认构造函数的 C++ 继承

具有非默认 EPMD 端口的 Erlang 节点不再响应 ping

具有非默认语言的 Doctrine i18n 上的 getTitle()

初始化具有非默认构造函数的 std::array 项的更好方法?

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

JAVA——声明一个父类A,他只有一个非默认构造方法;声明A的子类B,B具有默认方法及非默认方法,并在B的构造方法中调用基类A的构造方法