【问题标题】:Spark ignores SPARK_WORKER_MEMORY?Spark 忽略 SPARK_WORKER_MEMORY?
【发布时间】:2016-04-18 04:13:31
【问题描述】:

我使用的是独立集群模式,1.5.2。

尽管我在spark-env.sh 中设置了SPARK_WORKER_MEMORY,但看起来这个设置被忽略了。

我在bin/sbin 下的脚本中找不到任何设置-Xms/-Xmx 的迹象。

如果我使用ps 命令worker pid,看起来内存设置为1G

[hadoop@sl-env1-hadoop1 spark-1.5.2-bin-hadoop2.6]$ ps -ef | grep 20232
hadoop   20232     1  0 02:01 ?        00:00:22 /usr/java/latest//bin/java 
-cp /workspace/3rd-party/spark/spark-1.5.2-bin-hadoop2.6/sbin/../conf/:/workspace/
3rd-party/spark/spark-1.5.2-bin-hadoop2.6/lib/spark-assembly-1.5.2-hadoop2.6.0.jar:/workspace/
3rd-party/spark/spark-1.5.2-bin-hadoop2.6/lib/datanucleus-api-jdo-3.2.6.jar:/workspace/
3rd-party/spark/spark-1.5.2-bin-hadoop2.6/lib/datanucleus-rdbms-3.2.9.jar:/workspace/
3rd-party/spark/spark-1.5.2-bin-hadoop2.6/lib/datanucleus-core-3.2.10.jar:/workspace/
3rd-party/hadoop/2.6.3//etc/hadoop/ -Xms1g -Xmx1g org.apache.spark.deploy.worker.Worker 
--webui-port 8081 spark://10.52.39.92:7077

spark-defaults.conf:

spark.master            spark://10.52.39.92:7077
spark.serializer        org.apache.spark.serializer.KryoSerializer
spark.executor.memory   2g
spark.executor.cores    1

spark-env.sh:

export SPARK_MASTER_IP=10.52.39.92
export SPARK_WORKER_INSTANCES=1
export SPARK_WORKER_MEMORY=12g

我错过了什么吗?

谢谢。

【问题讨论】:

    标签: apache-spark


    【解决方案1】:

    使用 spark-shell 或 spark-submit 时,请使用 --executor-memory 选项。

    为独立 jar 配置它时,在创建 spark 上下文之前以编程方式设置系统属性。

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

    【讨论】:

      【解决方案2】:

      您在集群模式下使用了错误的设置。

      SPARK_EXECUTOR_MEMORY 是在集群模式下设置 Executor 内存的正确选项。

      SPARK_WORKER_MEMORY 仅适用于独立部署模式。

      从命令行设置执行器内存的其他方法:-Dspark.executor.memory=2g

      再看一个关于这些设置的相关 SE 问题:

      Spark configuration, what is the difference of SPARK_DRIVER_MEMORY, SPARK_EXECUTOR_MEMORY, and SPARK_WORKER_MEMORY?

      【讨论】:

      • 我正在使用 Spark 迈出第一步,希望我的措辞正确:我有 5 个节点集群,不是由 yarn/mesos 管理的,这不是独立集群模式吗?我确实将 SPARK_WORKER_MEMORY 设置为 12G,它确实在 web ui 中报告为 12g,但从命令行看起来 jvm 仅配置了 1G,正如您在问题的 ps 输出中看到的那样。
      • 您在集群模式下运行,因此您使用以下设置:spark://10.52.39.92:7077
      • 不确定我是否理解。鉴于原始问题更新,我是否使用正确的设置?为什么ps还是报1G?
      • 鉴于原始问题更新,您已使用 SPARK_EXECUTOR_MEMORY 设置而不是 SPARK_WORKER_MEMORY 设置。试试这个选项,看看这个结果。
      【解决方案3】:

      这是我在集群模式下的配置,spark-default.conf

      spark.driver.memory 5g
      spark.executor.memory   6g
      spark.executor.cores    4
      

      有类似的吗?

      如果您不添加此代码(使用您的选项),Spark 执行器将默认获得 1gb 的 Ram。

      否则,您可以在 ./spark-submit 上添加这些选项,如下所示:

      # Run on a YARN cluster
      export HADOOP_CONF_DIR=XXX
      ./bin/spark-submit \
        --class org.apache.spark.examples.SparkPi \
        --master yarn \
        --deploy-mode cluster \  # can be client for client mode
        --executor-memory 20G \
        --num-executors 50 \
        /path/to/examples.jar \
        1000
      

      如果资源分配正确,请在运行应用程序时尝试检查 master(ip/name of master):8080。

      【讨论】:

      • 感谢您的回答。我的集群不是由 yarn/mesos 管理的。我已经添加了conf文件来提问,这有意义吗?
      • 是的。我发布的 spark-submit 示例是针对纱线的。无论如何,如果您更改master,它就可以工作。可以加--executor-memory 20G
      • @DanieleO 如果应用程序通过spark-submit 在本地运行怎么办?到目前为止,通过提交选项调整 executor-memory 并没有帮助。
      【解决方案4】:

      我遇到了和你一样的问题。原因是,在独立模式下,spark.executor.memory 实际上被忽略了。有效果的是spark.driver.memory,因为执行者是住在驱动里面的。

      所以你可以做的就是将spark.driver.memory设置为你想要的任意高。

      这是我找到解释的地方: How to set Apache Spark Executor memory

      【讨论】:

        猜你喜欢
        • 2013-06-14
        • 2015-07-09
        • 1970-01-01
        • 2022-12-11
        • 1970-01-01
        • 2020-08-05
        • 2020-10-16
        • 2018-10-04
        • 1970-01-01
        相关资源
        最近更新 更多