私はすべてYARN(Hadoop 2.6.0/CDH 5.5)上に配備されたSparkバージョン(1.6,2.0,2.1)を混在させています。私は、他に何が実行されているかにかかわらず、特定のアプリケーションがYARNクラスターのリソースを枯渇させないことを保証しようとしています。YARNで実行しているときにSparkスケジューラプールはどのように機能しますか?
シャッフルサービスを有効にして、Fair Scheduler Poolsの一部をSparkのドキュメントに記載されているように設定しました。私は、リソースが不足しないことを決して望ん優先度の高いアプリケーションのための別のプールを作成し、ITリソースのminShare
を与えた:
<?xml version="1.0"?>
<allocations>
<pool name="default">
<schedulingMode>FAIR</schedulingMode>
<weight>1</weight>
<minShare>0</minShare>
</pool>
<pool name="high_priority">
<schedulingMode>FAIR</schedulingMode>
<weight>1</weight>
<minShare>24</minShare>
</pool>
</allocations>
私たちYARNクラスタ上スパークアプリケーションを実行すると、私がいることがわかります私が設定プールが認識されている:私はに私の呼び出しでspark.scheduler.pool
を設定していていても
17/04/04 11:38:20 INFO scheduler.FairSchedulableBuilder: Created pool default, schedulingMode: FAIR, minShare: 0, weight: 1
17/04/04 11:38:20 INFO scheduler.FairSchedulableBuilder: Created pool high_priority, schedulingMode: FAIR, minShare: 24, weight: 1
しかし、私は、私のアプリケーションが新しいhigh_priority
プールを使用していることが表示されません。つまり、クラスタが定期的に活動すると、優先度の高いアプリケーションで必要なリソースが得られなくなります。
17/04/04 11:39:49 INFO cluster.YarnScheduler: Adding task set 0.0 with 1 tasks
17/04/04 11:39:50 INFO scheduler.FairSchedulableBuilder: Added task set TaskSet_0 tasks to pool default
17/04/04 11:39:50 INFO spark.ExecutorAllocationManager: Requesting 1 new executor because tasks are backlogged (new desired total will be 1)
17/04/04 11:40:05 WARN cluster.YarnScheduler: Initial job has not accepted any resources; check your cluster UI to ensure that workers are registered and have sufficient resources
私はここで何が欠けていますか?私の同僚と私はYARNでプリエンプションを試みましたが、それは何もしませんでした。そして、YARNには、YARN queuesと呼ばれるSparkスケジューラプールに非常に似た概念があることがわかりました。だから今、我々は2つの概念が何らかの形で矛盾しているかどうかはわかりません
優先度の高いプールを期待どおりに機能させるにはどうすればよいですか? SparkスケジューラプールとYARNキューの間に何らかの矛盾がありますか? YARNキューがリソースに間でアプリケーションを管理するためのものである一方、スパークスケジューラプールは、リソースアプリケーション内を管理するためのものである: