我正在 Spark 上运行 apache beam 工作负载。我用 32GB 内存初始化了工作进程(从属进程以 -c 2 -m 32G
运行)。 Spark提交将驱动程序内存设置为30g,执行程序内存设置为16g。但是,执行程序失败并显示 java.lang.OutOfMemoryError: Java heap space
.
主界面显示每个执行器的内存为1024M。另外,我看到所有java进程都是以-Xmx 1024m
启动的。 。这意味着 Spark-submit 不会将其执行程序设置传播到执行程序。
管道选项如下:
--runner PortableRunner \
--job_endpoint=localhost:8099 \
--environment_type=PROCESS \
--environment_config='{"command": "$HOME/beam/sdks/python/container/build/target/launcher/linux_amd64/boot"}'
作业端点以默认方式设置:
docker run --rm --network=host --name spark-jobservice apache/beam_spark_job_server:latest --spark-master-url=spark://$HOSTNAME:7077
如何确保设置传播到执行程序?
更新: 我将conf/spark-defaults.conf设置为
spark.driver.memory 32g
spark.executor.memory 32g
和conf/spark-env.sh 到
SPARK_EXECUTOR_MEMORY=32g
并重新启动集群并重新启动所有内容,执行程序内存仍然限制为1024M
最佳答案
我找到了原因和解决方法。
jobserver 容器在内部运行其自己的 Spark 发行版,因此在本地计算机上的 Spark 发行版中配置的设置无效。
因此,解决方案是更改 jobserver 容器中的配置,例如在启动它时传递相应的环境变量:
docker run -e SPARK_EXECUTOR_MEMORY=32g --rm --network=host --name spark-jobservice apache/beam_spark_job_server:latest --spark-master-url=spark://$HOSTNAME:7077
关于java - (Apache Beam) 无法增加执行程序内存 - 尽管使用了多个设置,它仍固定为 1024M,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64488060/