由于超过内存限制而被YARN杀死的容器

时间:2018-05-29 14:55:41

标签: apache-spark apache-zeppelin google-cloud-dataproc

我正在google dataproc中创建一个具有以下特征的群集:

Master Standard (1 master, N workers)
  Machine       n1-highmem-2 (2 vCPU, 13.0 GB memory)
  Primary disk  250 GB

Worker nodes    2
  Machine type  n1-highmem-2 (2 vCPU, 13.0 GB memory)
  Primary disk  size    250 GB

我还要在此repositoryInitialization actions .sh中添加Container killed by YARN for exceeding memory limits. 4.0 GB of 4 GB physical memory used. Consider boosting spark.yarn.executor.memoryOverhead. 文件,以便使用zeppelin。

我使用的代码可以正常使用某些数据,但如果我使用更多的代码,我会收到以下错误:

yarn.nodemanager.vmem-check-enabled

我看过这样的帖子:Container killed by YARN for exceeding memory...,建议将false更改为yarn-site.xml

虽然我有点困惑。我初始化群集时是否会发生所有这些配置?

/usr/lib/zeppelin/conf/到底在哪里?我无法在主文件中找到它(无法在/usr/lib/spark/conf/usr/lib/hadoop-yar/identifier中找到它)以便更改它,如果更改了我需要的内容'重新启动'?

1 个答案:

答案 0 :(得分:4)

Igor是正确的,最简单的方法是创建一个集群并在启动服务之前指定要设置的任何其他属性。

然而,完全禁用YARN检查容器是否在其范围内是有点可怕的。无论哪种方式,您的VM最终都会耗尽内存。

错误消息是正确的 - 您应该尝试提升spark.yarn.executor.memoryOverhead。它默认为max(384m, 0.1 * spark.executor.memory)。在n1-highmem-2上,自spark.executor.memory=3712m以来最终为384m。您可以使用--properties spark:spark.yarn.executor.memoryOverhead=512m创建群集时设置此值。

如果我理解正确,JVM和Spark会尝试将内存使用量保持在spark.executor.memory - memoryOverhead之内。但是,python解释器(您的pyspark代码实际运行的地方)不在其会计中,而是在memoryOverhead之下。如果你在python进程中使用了大量内存,则需要增加memoryOverhead

以下是pyspark和Spark的内存管理方面的一些资源: