【问题标题】:(Apache Beam) Cannot increase executor memory - it is fixed at 1024M despite using multiple settings(Apache Beam) 无法增加执行程序内存 - 尽管使用了多个设置,但仍固定为 1024M
【发布时间】:2021-02-05 19:31:54
【问题描述】:

我正在 Spark 上运行 apache Beam 工作负载。我用 32GB 的内存初始化了工作线程(使用 -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

然后重启集群,重启一切,executor内存依然限制在1024M

【问题讨论】:

  • 这里有同样的问题,Beam 管道似乎没有考虑到执行程序内存的 spark 默认值。

标签: java python apache-spark apache-beam


【解决方案1】:

我找到了原因和解决方法。

jobserver 容器在内部运行自己的 spark 分发,因此在本地计算机上的 spark 分发中配置的设置无效。

因此,解决方案是更改作业服务器容器中的配置,例如在启动时传递相应的环境变量:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-24
    • 2011-12-20
    • 2019-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-03
    相关资源
    最近更新 更多