J'ai un mélange de versions Spark (1.6, 2.0, 2.1) toutes déployées sur YARN (Hadoop 2.6.0/CDH 5.5). J'essaie de garantir qu'une certaine application ne sera jamais affamée de ressources sur notre cluster YARN, indépendamment de ce qui peut être exécuté ailleurs.Comment fonctionnent les pools de planificateur Spark lorsqu'ils s'exécutent sur YARN?
J'ai activé le service de lecture aléatoire et ai configuré Fair Scheduler Pools comme décrit dans les documents Spark. J'ai créé un bassin séparé pour l'application de haute priorité, je ne veux plus jamais être privé de ressources, et lui a donné une minShare
des ressources:
<?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>
Quand je lance une application Spark sur notre cluster YARN, je peux voir que la piscines I configuré sont reconnus:
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
Cependant, je ne vois pas que mon application utilise la nouvelle piscine high_priority
, même si je suis en train spark.scheduler.pool
dans mon appel à spark-submit
. Cela signifie donc que lorsque le groupe est lié par l'activité régulière, ma demande de haute priorité ne reçoit pas les ressources dont il a besoin:
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
Qu'est-ce que je manque ici? Mes collègues et moi avons essayé d'activer la préemption dans YARN, mais cela n'a rien fait. Et puis nous avons réalisé qu'il y a un concept dans YARN très similaire aux pools de planificateur Spark appelé YARN queues. Nous ne sommes donc pas sûrs si les deux concepts sont en conflit. Comment pouvons-nous faire fonctionner notre pool de haute priorité comme prévu? Existe-t-il une sorte de conflit entre les pools de planificateur Spark et les files d'attente YARN?