hive上亿级别的表关联如何调优


这篇文章主要介绍了hive上亿级别的表关联如何调优,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。环境:公司决定使用宽表,将10个相关的大表进行全量关联(1个上亿级别的表,5个上千万的表,剩下的表都不到百万的表)花了两天的时间研究,测试例如: a~g这几个表中,a表为上亿级别的表,5个上千万的表,剩下为表都百万的表你会发现
最后一个job异常慢,并且reduce为1。也多人会说,你傻逼呀,设置reduce数呀,对这开发云主机域名是一个好办法,但是结果如何呢?草,我就是按照网上各种教程,测试了一整天,还是最后一个reduce为1;(我可是上亿级别噢!!!)hive自动分配reduce的计算方法1. hive.exec.reducers.bytes.per.reducer(默认为1000^3)2. hive.exec.reducers.max(默认为999)计算reducer数的公式很简单:N=min(参数2,总输入数据量/参数1)然后查询得知:reduce为1,是因为:没有使用group by使用了order by笛卡尔积我TM都使了一遍,还是reduce=1,我当时很无语,就尼玛不能再做清楚一点吗?(我可是小白呀!!!)时间:3个小时都没跑完,一直都是83%所以hadoop,看到了这个语句,就会分配一个reduce如何欺骗hive分配reduce呢?然后修改脚本(当然上面的设置reduce数这个不能少噢)使用聚合函数,加 group by然后小表放在前面(有人说:我TM要所有的信息,那你就用全连接呗)然后大表一般就往后排,从小到大,一顺排下来就行这样就能欺骗hive分配多个reduce,达到调优的效果时间:15分钟不到,兴奋到高潮了吗?哈哈缺点:生成200个文件,比较麻烦设置并行,对性能要求有点高,所以适度设置并行数量就行并行参数,仅做参考当参数为false的时候,三个job是顺序的执行set hive.exec.parallel=false;但是可以看出来其实两个子查询中的sql并无关系,可以并行的跑set hive.exec.parallel=true;hive> set hive.exec.parallel.thread.number; (如果机器一般,可以并行设置3,感觉比较合理)hive.exec.parallel.thread.number=8 默认并行数为8感谢你能够认真阅读完这篇文章,希望小编分享的“hive上亿级别的表关联如何调优”这篇文章对大家有帮助,同时也希望大家多多支持开发云,关注开发云行业资讯频道,更多相关知识等着你来学习!

相关推荐: kubernetes版本知识有哪些

本篇文章为大家展示了kubernetes版本知识有哪些,内容简明扼要并且容易理解,开发云主机域名绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一、版本格式Kubernetes 版本号格式为 x.y.z,其中 x 为大版本号,y 为小版本号,z 为…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 05/27 17:27
下一篇 05/27 17:27

相关推荐