如何为 apache spark worker 更改每个节点的内存

Posted

技术标签:

【中文标题】如何为 apache spark worker 更改每个节点的内存【英文标题】:How to change memory per node for apache spark worker 【发布时间】:2014-08-06 04:21:54 【问题描述】:

我正在配置一个 Apache Spark 集群。

当我使用 1 个主设备和 3 个从设备运行集群时,我在主监控页面上看到了这一点:

Memory
2.0 GB (512.0 MB Used)
2.0 GB (512.0 MB Used)
6.0 GB (512.0 MB Used)

我想增加工作人员的已用内存,但找不到合适的配置。我已将 spark-env.sh 更改如下:

export SPARK_WORKER_MEMORY=6g
export SPARK_MEM=6g
export SPARK_DAEMON_MEMORY=6g
export SPARK_JAVA_OPTS="-Dspark.executor.memory=6g"
export JAVA_OPTS="-Xms6G -Xmx6G"

但是使用的内存还是一样的。我应该怎么做才能改变使用的内存?

【问题讨论】:

抱歉这个不好的问题。我发现我想更改执行者的内存。现在,执行者只使用2.0 GB (512.0 MB Used)。如何通过更改配置或系统环境来增加内存? 【参考方案1】:

使用 1.0.0+ 并使用 spark-shell 或 spark-submit 时,请使用 --executor-memory 选项。例如

spark-shell --executor-memory 8G ...

0.9.0 及以下:

当你开始一个工作或启动 shell 时改变内存。我们必须修改 spark-shell 脚本,以便它将命令行参数作为底层 java 应用程序的参数传递。特别是:

OPTIONS="$@"
...
$FWDIR/bin/spark-class $OPTIONS org.apache.spark.repl.Main "$@"

然后我们可以如下运行我们的spark shell:

spark-shell -Dspark.executor.memory=6g

在为独立 jar 配置它时,我在创建 spark 上下文之前以编程方式设置系统属性并将值作为命令行参数传递(然后我可以使它比冗长的系统属性更短)。

System.setProperty("spark.executor.memory", valueFromCommandLine)

至于更改默认集群范围,抱歉,不完全确定如何正确执行。

最后一点 - 我有点担心您有 2 个 2GB 节点和一个 6GB 节点。您可以使用的内存将被限制为最小的节点 - 所以这里是 2GB。

【讨论】:

spark.executor.memory 是应用程序(作业)使用的内存,而不是分配给 worker 的内存。 理想情况下,您应该在 spark.env.sh 文件中设置值。这允许您设置默认值,而无需在每次运行 shell 时传入参数。【参考方案2】:

worker的默认配置是为每个worker分配Host_Memory - 1Gb。手动调整该值的配置参数是SPARK_WORKER_MEMORY,就像你的问题:

export SPARK_WORKER_MEMORY=6g.

【讨论】:

我明白你的意思,这就是问题的措辞,但我怀疑这就是他想要的,尽管从他在主监视器页面上的描述来看。 @massag 在我的例子中,每个worker默认只使用512MB。当我添加设置export SPARK_WORKER_MEMORY=6g。它不会为工人创造记忆。我仍然在主监视器页面上看到每个工作人员的内存为 512MB 母版页显示worker总内存和作业当前使用的内存。您的工作人员有 2/2/6Gb 的总内存,目前正在使用 512Mb。那是任务执行者的内存使用情况。要更改它,请使用 spark.executor.memory。请参阅@samthebest 答案。 @massag 我想增加任务执行器的内存使用量。我已将这一行 export SPARK_JAVA_OPTS="-Dspark.executor.memory=6g" 添加到 spark-env.sh 但它仍然是 512MB。这样做的正确方法是什么? 我也有同样的问题【参考方案3】:

就我而言,我使用 ipython notebook 服务器连接到 spark。我想增加executor的内存。

这就是我的工作:

from pyspark import SparkContext
from pyspark.conf import SparkConf

conf = SparkConf()
conf.setMaster(CLUSTER_URL).setAppName('ipython-notebook').set("spark.executor.memory", "2g")

sc = SparkContext(conf=conf)

【讨论】:

我正在寻找如何在 ipython 中设置内存 2 天,而你的是唯一对我有用的。 是的,这是唯一能让我摆脱 1024MB OOM 地狱的方法! :D【参考方案4】:

根据Spark documentation,您可以在提交申请时使用命令行参数--executor-memory 更改每个节点的内存。例如

./bin/spark-submit \
  --class org.apache.spark.examples.SparkPi \
  --master spark://master.node:7077 \
  --executor-memory 8G \
  --total-executor-cores 100 \
  /path/to/examples.jar \
  1000

我已经测试过了,它可以工作。

【讨论】:

【参考方案5】:

在 Spark 1.1.1 中,设置 worker 的 Max Memory。 在 conf/spark.env.sh 中,这样写:

export SPARK_EXECUTOR_MEMORY=2G

如果你还没有使用配置文件,复制模板文件

cp conf/spark-env.sh.template conf/spark-env.sh

然后进行更改,不要忘记来源

source conf/spark-env.sh

【讨论】:

这在 Spark 1.3.0 中对我有用(没有导出)。我确实采购了 spark-env.sh @tristan-wu 这不是纱线专用的吗?

以上是关于如何为 apache spark worker 更改每个节点的内存的主要内容,如果未能解决你的问题,请参考以下文章

如何为 Apache Spark 数据集中的枚举列编写案例类?

Worker spark webUI 在 Apache Spark 中不起作用

如何为 .NET Core 3.0 Worker 服务设置事件日志

如何为生成的 service worker 禁用 workbox-webpack-plugin 的警告

Spark 启动 | Worker 启动流程详解

Spark 分布式环境---slave节点无法启动(已解决)