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是唯一的,如果这有区别的话。
为了同时运行这些应用程序,我缺少什么?
第二个应用程序确实启动了,但在主监控网页上,我看到它是 "等待",它将有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>
随着这一点,你需要做一些更多的小的变化...在驱动程序代码,如池的第一个工作应该去和池的第二个工作应该去。
它是如何工作的。
更多的细节请看我的文章。
hadoop-yarn-fair-schedular-advantages-explained-part1。
hadoop-yarn-fair-schedular-advantages-explained-part2。
试试这些办法,克服等待。希望对你有所帮助...