记一次hive调优之旅

我遇到的业务场景是统计10个维度的用户画像数据,之前我是放在一个shell脚本里串行跑,总共跑下来差不多要9个多小时:从数据预处理、维度统计、数据上传三大部分。

9个多小时,时间有点长啊,受不鸟了,所以就想着怎么优化hive和集群,然后就各种百度,按照网上的一通操作下来并没啥用,也许是我用的方式不对,所以后面就干脆自己尝试着研究。

我们肯定要明确调优方向:hive,那么这就涉及到hdfs、hive、yarn。。。
首先是hdfs,这块这次基本上没动;
其次是hive本身,首先使用了Tez,CDH怎么集成Tez,这个看我之前的那篇文章,不多说。。下面讲讲这次调整的参数:

参数名 修改前 修改后 参数说明
hive.execution.engine 默认mr tez 执行引擎
hive.exec.parallel 默认flase true 是否允许并行
hive.exec.parallel.thread.number 默认8 32 是否允许并行
hive.tez.container.size 默认无 6144M tez容器的容量大小

具体在CDH页面上配置如下:


hive.png

第三,是重点yarn了,因为所有的hive任务,都需要yarn来分配资源的

参数名 修改前 修改后 参数说明
yarn.scheduler.minimum-allocation-mb 1024M 6144M 可申请的最少内存资源,以MB为单位
yarn.scheduler.maximum-allocation-mb 40752M 8192M 可申请的最大内存资源,以MB为单位
yarn.nodemanager.resource.memory-mb 37526M 61440M NM总的可用物理内存,以MB为单位
yarn.nodemanager.resource.cpu-vcores 24 30 可分配的CPU个数
yarn.scheduler.minimum-allocation-vcores 1 3 可申请的最小虚拟CPU个数
yarn.scheduler.maximum-allocation-vcores 32 8 可申请的最 大虚拟CPU个数

另外还需要修改一处地方,那就是yarn的资源池


yarn.png

经过上述一番设置后,重启yarn和hive,然后再整理一下hive脚本。
现在基本上是把脚本分成3个:
execPreProcess.sh :执行数据预处理任务


execPreProcess.png

execStatistic.sh :处理10个维度统计的任务


execStatistic.png

execSummary.sh:处理汇总上传的任务


execSummary.png

现在整体速度由原来的串行执行9小时,到现在并行执行3小时,速度上提升还是比较明显。

欢迎大家留言讨论
内容将同步到微信公众号,欢迎关注微信公众号:LearnBigData


qrcode.jpg

你可能感兴趣的:(记一次hive调优之旅)