gpt4 book ai didi

hadoop - 运行 Spark 作业时,YARN 不会基于公平份额抢占资源

转载 作者:可可西里 更新时间:2023-11-01 14:08:23 25 4
gpt4 key购买 nike

我在重新平衡 YARN 上的 Apache Spark 作业资源时遇到问题 Fair Scheduled队列。

对于测试,我已将 Hadoop 2.6(也尝试过 2.7)配置为在 MacOS 上使用本地 HDFS 以伪分布式模式运行。对于作业提交,使用来自 Spark's website 的“为 Hadoop 2.6 及更高版本预构建 Spark 1.4”(也尝试过 1.5)分发.

在 Hadoop MapReduce 作业上使用基本配置进行测试时,公平调度程序按预期工作:当集群的资源超过某个最大值时,计算公平份额,并根据这些计算抢占和平衡不同队列中作业的资源。

对 Spark 作业运行相同的测试,在这种情况下,YARN 正在为每个作业正确计算公平份额,但 Spark 容器的资源没有重新平衡。

这是我的配置文件:

$HADOOP_HOME/etc/hadoop/yarn-site.xml

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.spark_shuffle.class</name>
<value>org.apache.spark.network.yarn.YarnShuffleService</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value>
</property>
<property>
<name>yarn.scheduler.fair.preemption</name>
<value>true</value>
</property>
</configuration>

$HADOOP_HOME/etc/hadoop/fair-scheduler.xml

<?xml version="1.0" encoding="UTF-8"?>
<allocations>
<defaultQueueSchedulingPolicy>fair</defaultQueueSchedulingPolicy>
<queue name="prod">
<weight>40</weight>
<schedulingPolicy>fifo</schedulingPolicy>
</queue>
<queue name="dev">
<weight>60</weight>
<queue name="eng" />
<queue name="science" />
</queue>
<queuePlacementPolicy>
<rule name="specified" create="false" />
<rule name="primaryGroup" create="false" />
<rule name="default" queue="dev.eng" />
</queuePlacementPolicy>
</allocations>

$HADOOP_HOME/etc/hadoop/core-site.xml

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>

$HADOOP_HOME/etc/hadoop/core-site.xml

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>

测试用例是:

在权重为 40 的“prod”队列上运行一个作业(必须分配所有资源的 40%),正如预期的那样,该作业占用所有需要的空闲资源(62.5% 的集群资源)。

./bin/spark-submit --class org.apache.spark.examples.SparkPi \
--master yarn-cluster \
--driver-memory 512M \
--executor-memory 768M \
--executor-cores 1 \
--num-executors 2 \
--queue prod \
lib/spark-examples*.jar 100000

之后在权重为 60 的“dev.eng”队列上运行相同的作业,这意味着该作业必须分配所有资源的 60%,并将第一个作业的资源减少到 ~40%。

./bin/spark-submit --class org.apache.spark.examples.SparkPi \
--master yarn-cluster \
--driver-memory 512M \
--executor-memory 768M \
--executor-cores 1 \
--num-executors 2 \
--queue dev.eng \
lib/spark-examples*.jar 100000

不幸的是,集群资源没有变化 - 第一个作业为 62.5%,第二个作业为 37.5%。

最佳答案

您需要在分配 xml 中设置抢占超时之一。一种用于最低份额,一种用于公平份额,都以秒为单位。默认情况下,不会设置超时。

来自 Hadoop:权威指南第 4 版

If a queue waits for as long as its minimum share preemption timeout without receiving its minimum guaranteed share, then the scheduler may preempt other containers. The default timeout is set for all queues via the defaultMinSharePreemptionTimeout top-level element in the allocation file, and on a per-queue basis by setting the minSharePreemptionTimeout element for a queue.

Likewise, if a queue remains below half of its fair share for as long as the fair share preemption timeout, then the scheduler may preempt other containers. The default timeout is set for all queues via the defaultFairSharePreemptionTimeout top-level element in the allocation file, and on a per-queue basis by setting fairSharePreemptionTimeout on a queue. The threshold may also be changed from its default of 0.5 by setting defaultFairSharePreemptionThreshold and fairSharePreemptionThreshold (per-queue).

关于hadoop - 运行 Spark 作业时,YARN 不会基于公平份额抢占资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33082088/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com