我正在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
我还要在此repository的Initialization 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
中找到它)以便更改它,如果更改了我需要的内容'重新启动'?
答案 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的内存管理方面的一些资源: