Java (Apache Beam)无法增加执行器内存-尽管使用了多个设置,但它固定为1024M

Java (Apache Beam)无法增加执行器内存-尽管使用了多个设置,但它固定为1024M,java,python,apache-spark,apache-beam,Java,Python,Apache Spark,Apache Beam,我正在Spark上运行apache beam工作负载。我用32GB内存初始化了工作进程(从运行时使用-c2-m32g)。Spark submit将驱动程序内存设置为30g,将执行器内存设置为16g。但是,执行器失败时会出现java.lang.OutOfMemoryError:java堆空间 主gui指示每个执行器的内存为1024M。此外,我看到所有java进程都是使用-xmx1024M启动的。这意味着spark submit不会将其执行器设置传播给执行器 管道选项如下: --runner

我正在Spark上运行apache beam工作负载。我用32GB内存初始化了工作进程(从运行时使用
-c2-m32g
)。Spark submit将驱动程序内存设置为30g,将执行器内存设置为16g。但是,执行器失败时会出现
java.lang.OutOfMemoryError:java堆空间

主gui指示每个执行器的内存为1024M。此外,我看到所有java进程都是使用
-xmx1024M
启动的。这意味着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\u spark\u job\u 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

同样的问题,Beam管道似乎没有考虑执行器内存的spark默认值。