这里是火花/ Scala菜鸟。
我正在集群环境中运行spark。我有两个非常相似的应用程序(每个应用程序都具有独特的spark配置和上下文)。当我尝试将它们都踢开时,第一个似乎抢占了所有资源,而第二个则等待着抢夺资源。我在提交上设置资源,但这似乎无关紧要。每个节点都有24个内核和45 GB可用内存。这是我要提交的两个要并行运行的命令。
./bin/spark-submit --master spark://MASTER:6066 --class MainAggregator --conf spark.driver.memory=10g --conf spark.executor.memory=10g --executor-cores 3 --num-executors 5 sparkapp_2.11-0.1.jar -new
./bin/spark-submit --master spark://MASTER:6066 --class BackAggregator --conf spark.driver.memory=5g --conf spark.executor.memory=5g --executor-cores 3 --num-executors 5 sparkapp_2.11-0.1.jar 01/22/2020 01/23/2020
[另外,我应该注意到第二个应用程序确实启动了,但是在主监控页面中,我将其视为“等待”,它将具有0个核心,直到第一个完成为止。这些应用程序确实从同一张表中提取数据,但是它们提取的数据块却大不相同,因此如果有所区别,则RDD / Dataframes是唯一的。
为了同时运行这些程序,我缺少什么?
第二个应用程序确实启动了,但是在主监控页面中我看到了为“等待”,它将有0个核心,直到第一个完成。
前段时间,我遇到了同样的事情。这里有两件事。.
可能是这些原因。
1)您没有适当的基础结构。
2)您可能已经使用了容量调度程序,该容量调度程序没有抢先机制来容纳新作业。
如果为#1,则必须增加更多的节点,并使用spark-submit
分配更多的资源。
如果是#2,那么您可以采用hadoop fair计划,在其中您可以维护2个池see spark documentation on this的好处是您可以运行并行作业Fair将通过抢占一些资源并分配给另一个并行运行的作业来照顾自己。 。
mainpool
用于第一个火花作业。backlogpool
运行第二个火花作业。 要实现这一点,您需要在池配置中使用类似的xml样品池配置:
<pool name="default">
<schedulingMode>FAIR</schedulingMode>
<weight>3</weight>
<minShare>3</minShare>
</pool>
<pool name="mainpool">
<schedulingMode>FAIR</schedulingMode>
<weight>3</weight>
<minShare>3</minShare>
</pool>
<pool name="backlogpool">
<schedulingMode>FAIR</schedulingMode>
<weight>3</weight>
<minShare>3</minShare>
</pool>
除此之外,您还需要在驱动程序代码中进行一些更小的更改...,例如应该执行第一个池的作业和应该执行第二个池的作业。
它是如何工作的:
有关更多详细信息,请参阅我的文章。
hadoop-yarn-fair-schedular-advantages-explained-part1
hadoop-yarn-fair-schedular-advantages-explained-part2
尝试这些想法来克服等待。希望这会有所帮助。