azkaban – 同时拉起JOB过多导致机器打满

azkaban经常拉起的就是Hive命令,计算任务其实是丢到Yarn集群中运行的,然而实践中发现Hive命令是非常废本地CPU和Mem的,这是为什么呢?

Hive会在客户端进行SQL解析产生执行计划,生成Java代码,编译Java代码,打包Jar等等,这个过程显然非常耗费CPU和Mem,最终才是提交Jar到Yarn进行MR计算。

如果我们不能合理控制azkaban的JOB并行度,那么就会同时有很多Hive并发的进行重计算,整机的CPU和内存会迅速抬升,如果内存资源不足就会卡死服务器。

所以,我们需要做的一方面是扩容azkaban服务器的配置与集群规模,另外需要为每一个azkaban节点限制JOB并发度,避免将机器打卦:

executor.flow.threads,默认30,表示azkaban节点允许并发的flow数量。

flow.num.job.threads,默认10,表示每个flow允许并发的job数量。

executor.maxThreads,默认50,限制flow*job的总数量。

我在16核32G机器上,我稍微降低了一下上述参数就比较平稳了,不过启动flow瞬时还是会并发hive编译太多而打满,后续因为任务自然错峰就不会出现突增了,具体大家自行找到一个合适的值即可,不过通常来说确保内存充足即可(一个hive基本吃掉1GB内存),CPU打满也无所谓,因为都是瞬时的。

如果文章帮助您解决了工作难题,您可以帮我点击屏幕上的任意广告,或者赞助少量费用来支持我的持续创作,谢谢~