Mpi*_*ris 6 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
Run Code Online (Sandbox Code Playgroud)
我还添加Initialization actions了.sh这个存储库中的文件以使用 zeppelin。
我使用的代码可以很好地处理某些数据,但是如果我使用更多的数据,则会出现以下错误:
Container killed by YARN for exceeding memory limits. 4.0 GB of 4 GB physical memory used. Consider boosting spark.yarn.executor.memoryOverhead.
Run Code Online (Sandbox Code Playgroud)
我看到的帖子像这样的:集装箱杀害纱线超过内存...它建议更改yarn.nodemanager.vmem-check-enabled到false。
我有点困惑。当我初始化集群时是否所有这些配置都发生了?
还有具体位置在哪里yarn-site.xml?我无法在 master 中找到它(无法在/usr/lib/zeppelin/conf/, /usr/lib/spark/conf, 中找到它/usr/lib/hadoop-yar/),以便更改它,如果更改了,我需要“重新启动”什么?
小智 6
Igor 是对的,最简单的方法是创建一个集群并在启动服务之前指定要设置的任何其他属性。
然而,完全禁用 YARN 检查容器是否在其范围内有点可怕。无论哪种方式,您的 VM 最终都会耗尽内存。
错误信息是正确的——您应该尝试提高spark.yarn.executor.memoryOverhead。它默认为max(384m, 0.1 * spark.executor.memory). 在 n1-highmem-2 上,从spark.executor.memory=3712m. 您可以在创建集群时使用 设置此值--properties spark:spark.yarn.executor.memoryOverhead=512m。
如果我理解正确,JVM 和 Spark 会尝试将内存使用量保持在spark.executor.memory - memoryOverhead. 但是,python 解释器(您的 pyspark 代码实际运行的地方)不在其会计范围内,而是属于memoryOverhead. 如果在python进程中使用了大量内存,则需要增加memoryOverhead.
以下是有关 pyspark 和 Spark 内存管理的一些资源:
| 归档时间: |
|
| 查看次数: |
6897 次 |
| 最近记录: |