spark/scala noob在这里。
我正在群集环境中运行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是唯一的,如果这有区别的话。
为了同时运行这些,我遗漏了什么?
1条答案
按热度按时间eit6fx6z1#
第二个应用程序启动,但在主监测网页我看到它是“等待”,它将有0个核心,直到第一次完成。
不久前我也遇到了同样的事情。这里有两件事。。
可能这些都是原因。
1) 你没有合适的基础设施。
2) 您可能已经使用了容量调度器,它没有先发制人的机制来容纳新的作业,直到它完成为止。
如果是#1,则必须增加更多节点,并使用
spark-submit
.如果是#2,那么您可以采用hadoop fair schedular,在那里您可以维护2个池请参阅spark文档关于这个优点的介绍您可以运行parllel jobs fair将通过抢占一些资源并分配给另一个并行运行的作业来处理。
mainpool
为了第一份工作。。backlogpool
去做你的第二份工作。要实现这一点,您需要使用池配置示例池配置提供如下xml:
同时你还需要做一些小的改变。。。在驱动程序代码中,比如第一个作业应该转到哪个池,第二个作业应该转到哪个池。
工作原理:
更多细节请看我的文章。。
hadoop-yarn-fair-schedular-advantages-explained-第1部分
hadoop-yarn-fair-schedular-advantages-explained-第2部分
尝试这些想法来克服等待。希望这有帮助。。