本文小编为大家详细介绍“CDH集群调优的方法是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“CDH集群调优的方法是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。
DRF和相关参数
DRF: Dominant Resource Fairness,根据CPU和内存公平调度资源。CDH动态资源池默认采用的DRF计划策略。简单的理解就是内存不够的时候,多余的CPU就不会分配任务了,就让他空着;CPU不够的时候,多出来的内存也不会再启动任务了。
理解这个计划策略后,再查看Yarn启动任务时资源相关的参数,发现有以下几个参数可能会产生影响:
mapreduce.map.memory.mb ,map任务内存,cdh默认1G
mapreduce.map.cpu.vcores ,map任务虚拟CPU核数,cdh默认1
mapreduce.reduce.memory.mb ,reduce任务内存,cdh默认1G
mapreduce.reduce.cpu.vcores ,reduce任务虚拟CPU核数,cdh默认1
yarn.nodemanager.resource.memory-mb ,容器内存,cdh默认8G
yarn.nodemanager.resource.cpu-vcores ,容器虚拟CPU核数,cdh默认8,但CM会自动检测内核数并修改,我这里被自动改成了24。
可以看到默认配置下,CPU核数和内存是1:1G的比例来启动任务的。
接着查看了下分配给Yarn的内存,果然是8×15=120G,所以可用内存比可用vcores(360个)比起来就小太多了,导致按照1:1G的比例下最多只能使用120个vcores。
测试
为了证实我的猜想,将 yarn.nodemanager.resource.memory-mb 调成了16G(咱内存128G,管够)。重启yarn后,再次启动MR,于是有了下图:
可以看到参数调整前,Yarn可用内存为120G,调整后变成了240G;vcores由调整前的120变成了240。至此,证明猜想正确。
所以对于这个集群来说,由于内存为128G,内核为24个,所以完全可以将 yarn.nodemanager.resource.memory-mb 参数调成24G,这样就能将所有的CPU都利用起来了。
测试结果
yarn.nodemanager.resource.memory-mb 为8G时:
Time taken: 3794.17 secondsTotal MapReduce CPU Time Spent: 3 days 10 hours 43 minutes 22 seconds 640 msec
yarn.nodemanager.resource.memory-mb 为16G时:
Time taken: 2077.138 secondsTotal MapReduce CPU Time Spent: 3 days 12 hours 55 minutes 43 seconds 210 msec
可以看到确实快了很多很多。(ps:两次跑的任务所用的数据不一样,以免缓存导致第二次跑相同的任务会速度比第一次快,但两次任务所用的数据量差不多,都在650G左右)
其它
查看VCores SQL
SELECT allocated_vcores_cumulative, available_vcores where category=YARN_POOL and serviceName="yarn" and queueName=root
查看分配给Yarn的内存 SQL
SELECT allocated_memory_mb_cumulative, available_memory_mb where category=YARN_POOL and serviceName="yarn" and queueName=root
当然最简单的查看方式就是在CM的“动态资源池”页面看。
读到这里,这篇“CDH集群调优的方法是什么”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网行业资讯频道。