我有一个由 YARN 管理的集群。我在和中启用了公平调度(详见下文)。yarn-site.xml
fair-scheduler.xml
根据Cloudera 关于公平调度的博客文章,我希望如果我将一些任务安排到q1
队列中(动态创建,使用默认值,例如weigth=1
),然后将一些其他任务安排到test_queue
(weight=2
),来自的任务q1
将被抢占(1 秒后)平衡test_queue
的公平份额,但它不会发生。
而是q1
使用 70% 的集群资源(公平份额为 33%)并test_queue
获得 5% 的资源公平份额为 67%。
我错过了什么吗?
以下是我的 YARN 配置:
<!-- yarn-site.xml -->
<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>
和
<!-- fair-scheduler.xml -->
<allocations>
<queue name="test_queue">
<weight>2.0</weight>
<schedulingPolicy>fair</schedulingPolicy>
<fairSharePreemptionTimeout>1</fairSharePreemptionTimeout>
<fairSharePreemptionThreshold>1</fairSharePreemptionThreshold>
</queue>
<defaultFairSharePreemptionTimeout>1</defaultFairSharePreemptionTimeout>
<defaultFairSharePreemptionThreshold>1</defaultFairSharePreemptionThreshold>
<queuePlacementPolicy>
<rule name="specified"/>
<rule name="default" queue="test_queue"/>
</queuePlacementPolicy>
</allocations>
我从 spark 示例提交 Pi 计算作业:
spark-submit --class org.apache.spark.examples.SparkPi --master yarn --deploy-mode cluster --executor-memory 7G --executor-cores 4 /opt/spark2/examples/jars/spark-examples_2.11-2.0.0.jar 1000000