我正在spark上运行apache beam工作负载。我用32gb的内存初始化了worker(用 -c 2 -m 32G
). spark submit将驱动程序内存设置为30g,将执行程序内存设置为16g。然而,遗嘱执行人失败了 java.lang.OutOfMemoryError: Java heap space
.
主gui指示每个执行器的内存为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
1条答案
按热度按时间xzv2uavs1#
我找到了原因和解决办法。
jobserver容器在内部运行它自己的spark分发,因此在本地计算机上的spark分发中配置的设置无效。
因此,解决方案是更改jobserver容器中的配置,例如在启动时传递相应的环境变量: