首页 > 解决方案 > 在 YARN 模式下启用 spark 的动态分配

问题描述

这个问题与类似,但没有答案。

我正在尝试在 YARN 模式下启用 Spark 中的动态分配。我有 11 个节点集群,有 1 个主节点和 10 个工作节点。我正在按照以下链接获取说明:

对于 YARN 中的设置:http: //spark.apache.org/docs/latest/running-on-yarn.html#configuring-the-external-shuffle-service

配置变量需要在 spark-defaults.conf 中设置:https ://spark.apache.org/docs/latest/configuration.html#dynamic-allocation https://spark.apache.org/docs/latest/configuration。 html#shuffle-behavior

我还参考了以下链接和其他一些资源: https ://jaceklaskowski.gitbooks.io/mastering-apache-spark/spark-dynamic-allocation.html#spark.dynamicAllocation.testing

以下是我正在执行的步骤:

  1. 在 spark-defaults.conf 中设置配置变量。我的与动态分配和洗牌服务相关的 spark-defaults.conf 如下:

    spark.dynamicAllocation.enabled=true
    spark.shuffle.service.enabled=true
    spark.shuffle.service.port=7337
    
  2. 在 yarn-site.xml 中进行更改

    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>spark_shuffle</value>
    </property>
    <property>
        <name>yarn.nodemanager.auxservices.spark_shuffle.class</name>
        <value>org.apache.spark.network.yarn.YarnShuffleService</value>
    </property>
    <property>
        <name>yarn.nodemanager.recovery.enabled</name>
        <value>true</value>
    </property>
    <property>
        <name>yarn.application.classpath</name>
        <value> $HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*,$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*,$HADOOP_MAPRED_HOME/share/hadoop/common/*,$HADOOP_MAPRED_HOME/share/hadoop/common/lib/*,$HADOOP_MAPRED_HOME/share/hadoop/hdfs/*,$HADOOP_MAPRED_HOME/share/hadoop/hdfs/lib/*,$HADOOP_MAPRED_HOME/share/hadoop/yarn/*,$HADOOP_MAPRED_HOME/share/hadoop/yarn/lib/*,$HADOOP_MAPRED_HOME/share/hadoop/tools/*,$HADOOP_MAPRED_HOME/share/hadoop/tools/lib/*,$HADOOP_MAPRED_HOME/share/hadoop/client/*,$HADOOP_MAPRED_HOME/share/hadoop/client/lib/*,/home/hadoop/spark/common/network-yarn/target/scala-2.11/spark-2.2.2-SNAPSHOT-yarn-shuffle.jar </value>
    </property>
    

    所有这些步骤都在所有工作节点中复制,即 spark-defaults.conf 具有上述值,yarn-site.xml 具有这些属性。我已确保 /home/hadoop/spark/common/network-yarn/target/scala-2.11/spark-2.2.2-SNAPSHOT-yarn-shuffle.jar 存在于所有工作节点中。

  3. 然后我在工作节点和主节点中运行 $SPARK_HOME/sbin/start-shuffle-service.sh 。在主节点中,我使用 stop-yarn.sh 然后 start-yarn.sh 重新启动 YARN

  4. 然后我正在做 YARN node -list -all 来查看工作节点,但我看不到任何节点

  5. 当我禁用该属性时

    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>spark_shuffle</value>
    </property>
    

    我可以正常看到所有工作节点,因此似乎没有正确配置 shuffle 服务。

标签: apache-sparkhadoop-yarndynamic-memory-allocation

解决方案


推荐阅读