同时有多个Spark应用程序,相同的Jarfile…作业处于等待状态

问题描述 投票:1回答:1

这里是火花/ 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是唯一的。

为了同时运行这些程序,我缺少什么?

apache-spark hadoop yarn
1个回答
0
投票

第二个应用程序确实启动了,但是在主监控页面中我看到了为“等待”,它将有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>

除此之外,您还需要在驱动程序代码中进行一些更小的更改...,例如应该执行第一个池的作业和应该执行第二个池的作业。

它是如何工作的:

enter image description here

有关更多详细信息,请参阅我的文章。

hadoop-yarn-fair-schedular-advantages-explained-part1

hadoop-yarn-fair-schedular-advantages-explained-part2

尝试这些想法来克服等待。希望这会有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.