spark-beeline可以指定队列吗

spark-beeline可以指定队列吗,第1张

解决方案MapReduce运行队列的指定是通过配置(Configuration)属性“mapreduce.job.queuename”指定的。大家可能首先想到的是通过“setmapreduce.job.queuename=queueName”的方式来选取运行队列,这在手动任务(临时分析需求)的场景下是不可取

spark默认调度模式:

Spark中的调度模式主要有两种:FIFO和FAIR。默认情况下Spark的调度模式是FIFO(先进先出),谁先提交谁先执行,后面的任务需要等待前面的任务执行。

而FAIR(公平调度)模式支持在调度池中为任务进行分组,不同的调度池权重不同,任务可以按照权重来决定执行顺序。使用哪种调度器由参数spark。scheduler。mode来设置,可选的参数有FAIR和FIFO,默认是FIFO。

含义

Spark默认采取FIFO策略运行多个Jobs,它提供一个队列来保存已经提交的Jobs,如果队头的Job不需要占用所有的集群资源,那么后续的 Job可以立即运行,但是如果队头的Job需要占用所有的集群资源,且运行时间很长,那么即使后续的Job很小,也要等待前面的Job执行完后才可以执 行,这样就造成了大量的延迟。

如前文,为了彻底解决Yarn提交任务之后停留在ACCEPTED的问题,我们对Yarn的资源分配做了多组实验,过程及结果如下。

调度方式:FairScheduler

节点配置信息:

Spark on Yarn实验:

client模式和cluster模式差距不大,统一用client运行一个资源消耗比较大的连表Spark SQL查询并输出。

实验结果:

成功运行

Driver:1核3g

excutor:1核3g

executor数量:6个

实验结果:

成功运行:

Driver:1核3G

Executor:1核3G

Executor个数:2个

实验结论1:在Fair模式下,不指定Executor数量,则会尽量多的配置,结果不固定;指定数量的话,按照指定的来配置。

实验结果:

成功运行:

Driver:1核5G

Executor:2核5G

Executor个数:2个

实验结果:

成功运行

Driver:1核5G

Executor:2核5G

Executor个数:2个

Driver: 2核4g

executor:3核8g

executor/container数量:未指定

实验结果:

在Spark端就挂掉了

java.lang.IllegalArgumentException: Required executor memory (8192), overhead (819 MB), and PySpark memory (0 MB) is above the max threshold (6144 MB) of this cluster! Please check the values of 'yarn.scheduler.maximum-allocation-mb' and/or 'yarn.nodemanager.resource.memory-mb'.

这个主要是因为我们设置了单个应用最大申请的资源为3核6g,超过的拒绝接受,发token。

实验结果:

Driver:1核5g(不知道为什么CPU核被削减了)

Exexutor:3核6g

executor/container数量:2个

实验结果:

运行成功

Driver:1核5g

Exexutor:3核6g

executor/container数量:未指定

综上来看,对每个任务进行资源限制,是非常重要的!!

接下来我们测试多任务在Fair Scheduler的调度情况。

我们统一设置为一个队列。

任务2资源申请同任务1

实验结果:

任务1运行成功,任务2ACCEPTED。

任务1运行结束,任务2RUNNING。

任务2资源申请同任务1

实验结果:

任务1运行成功,分配了4个Executor

任务2Accepted了..

在任务1运行结束后,任务2长时间ACCEPTED了。。。

原来是同事把主机名给改了,看了日志才知道,Yarn不认识,一直在发请求,重新实验。

同时RUNNING起来了。

经验教训:多读日志!


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11564171.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存