首页 > 解决方案 > 有没有一种简单的方法可以使用带有 Yarn 的 Spark 排除节点?

问题描述

概述
我真的不想要队列或节点标签。我只想指定这个 spark 应用程序应该在 2 个 worker 上运行,随意选择它们。我似乎无法做到这一点,所以我已经在自己的节点标签上设置了每个节点,并制作了限制对某些节点的访问的队列。

情况
假设我有节点标签 a,b,c 用于节点http://a.example:10000http://b.example:10000http://c.example:10000

我有队列: 1_q,2_q,3_q
1_q访问
2_q可访问a,b
3_q可访问a,b,c

我希望能够使用队列 1_q 并让它运行 100% 的资源
我希望能够使用队列 2_q 并让它运行 100% 的 a 和 100% 的 b
我希望能够使用排队 3_q 并让它运行 100% 的 a 和 100% 的 b 和 100% 的 c

我已将节点标签 a、b、c 设置为“exclusive=false”并尝试“exclusive=true”。我能够使用“exclusive = false”来处理事情,但它使用的不仅仅是可访问节点。我尝试了“exclusive=true”,但 3_q 在默认分区中运行,没有任何资源,因此没有任何运行。

已经有一个 pyspark 属性
,我真的认为所有这些都是矫枉过正的。
有一个 pyspark 属性:
spark.yarn.exclude.nodes
但根据我的经验,它没有做任何事情。我已经尝试过:
conf.set("spark.yarn.exclude.nodes","a")
以及
conf.set("spark.yarn.exclude.nodes","a.example")
但它不排除它们,即我可以清楚地看到容器在使用该应用程序的 yarn web ui 的那些节点上运行

如果我可以设置一个包含所有可用分区的队列,然后使用该属性将它们排除在外,那就太好了。
或者
如果“节点标签表达式”可以包含多个标签,那就太好了。

这种使用 yarn/spark/pyspark 的方式看起来是否合理(基于每个应用程序排除一些节点?)

标签: apache-sparkhadooppysparkhadoop-yarn

解决方案


推荐阅读