同一时间多个Spark应用,同一个Jarfile......任务处于等待状态。

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

SparkScala是个新手。

我在一个集群环境中运行spark,我有两个非常相似的应用程序(每个都有独特的spark配置和上下文)。 我有两个非常相似的应用程序(每个都有独特的spark配置和上下文)。 当我试着把它们两个都踢掉时,第一个似乎会抓取所有资源,第二个会等待抓取资源。 我在提交上设置资源,但似乎并不重要。 每个节点都有24个核心和45GB内存可供使用。 下面是我使用的两个命令,我想并行运行的提交。

./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

另外,我应该注意到,第二个App确实启动了,但在主监控网页中,我看到它是 "等待",在第一个App完成之前,它将有0个核心。 这些应用程序确实从相同的表中拉取数据,但它们拉取的数据块会有很大不同,所以RDDDataframes是唯一的,如果这有区别的话。

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

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

第二个应用程序确实启动了,但在主监控网页上,我看到它是 "等待",它将有0个核心,直到第一个完成。


我前段时间也遇到了同样的事情。这里有2个问题。

可能是这些原因。

1) 你没有合适的基础设施。

2) 你可能使用了容量调度器,它没有先发制人的机制来适应新的工作,直到它。

如果是第一种情况,那么你必须增加更多的节点,用你的资源分配更多的资源。spark-submit.

如果是#2,那么你可以采用hadoop公平的schedular,在那里你可以保持2个池。 请参阅火花文档 好处是你可以运行parllel作业,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.