我一直在 8 节点集群上部署 SparkPi 示例。与示例相关的任务似乎没有部署到集群中的所有节点,即使集群未得到充分利用(没有其他作业在运行)。
以下是我启动 SparkPi 示例的方式:
spark-submit --class org.apache.spark.examples.SparkPi --master yarn --deploy-mode cluster --driver-memory 1g --executor-memory 1g --executor-cores 1 --num-executors 7 $SPARK_HOME/lib/spark-examples-1.6.1-hadoop2.6.0.jar 100000
我觉得这是因为我在资源管理器中使用了 CapacityScheduler
。这是我的 yarn-site.xml
文件:
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master.cluster</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>master.cluster:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>master.cluster:8030</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>0.0.0.0:8088</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>master.cluster:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>master.cluster:8033</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>master.cluster:8033</value>
</property>
<property>
<name>yarn.application.classpath</name>
<value>/usr/local/hadoop/etc/hadoop, /usr/local/hadoop/share/hadoop/common/*, /usr/local/hadoop/share/hadoop/common/lib/*, /usr/local/hadoop/share/hadoop/hdfs/*, /usr/local/hadoop/share/hadoop/hdfs/lib/*, /usr/local/hadoop/share/hadoop/mapreduce/*, /usr/local/hadoop/share/hadoop/mapreduce/lib/*, /usr/local/hadoop/share/hadoop/yarn/*, /usr/local/hadoop/share/hadoop/yarn/lib/*</value>
</property>
<property>
<description>
Number of seconds after an application finishes before the nodemanager's
DeletionService will delete the application's localized file directory
and log directory.
To diagnose Yarn application problems, set this property's value large
enough (for example, to 600 = 10 minutes) to permit examination of these
directories. After changing the property's value, you must restart the
nodemanager in order for it to have an effect.
The roots of Yarn applications' work directories is configurable with
the yarn.nodemanager.local-dirs property (see below), and the roots
of the Yarn applications' log directories is configurable with the
yarn.nodemanager.log-dirs property (see also below).
</description>
<name>yarn.nodemanager.delete.debug-delay-sec</name>
<value>600</value>
</property>
</configuration>
我如何调整 YARN 以便它在所有 节点上部署任务?
最佳答案
- 应用程序管理器不应占用太多资源。宣布分配太多 100% 真的太多了。我不知道你在这里做了什么好事(怀疑没有)。
- 您应该更愿意在资源可用的情况下在同一节点上运行尽可能多的任务。这将避免通过集群的内部网络序列化和发送数据的开销。您还应该更愿意在同一个执行程序实例中运行尽可能多的任务以允许内存共享。
- 在默认设置中使用容量调度程序时,它仅根据内存占用量计算资源,而忽略 CPU 占用量。您将内存占用声明为驱动程序、应用程序管理器 (am) 和执行程序的 Spark 配置和参数的一部分。有关更多详细信息,请参阅 spark 手册,特别是 the part about running Spark on Yarn和 Spark Configuration .具体的spark配置为:
- spark.yarn.am.memory(配置)
- spark.driver.memory(配置)
- spark.executor.memory(配置)
请注意,核心数量的设置也很重要,但更多的是被 spark 本身而不是 yarn 使用(除非你改变它计算资源利用率的方式)。
如果您可以在单个节点上运行需要 32 个 CPU 内核的单个作业,那么首先祝贺您的系统不错,但这可能是您想要运行它的方式!
关于hadoop - 强制 YARN 在所有从站上部署 Spark 任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37199791/