共计 1706 个字符,预计需要花费 5 分钟才能阅读完成。
本文丸趣 TV 小编为大家详细介绍“CDH 集群调优的方法是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“CDH 集群调优的方法是什么”文章能帮助大家解决疑惑,下面跟着丸趣 TV 小编的思路慢慢深入,一起来学习新知识吧。
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 集群调优的方法是什么”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注丸趣 TV 行业资讯频道。