hive的优化

https://mp.weixin.qq.com/s?src=11&timestamp=1585114892&ver=2237&signature=Lk2sAwtr2YRwgCdaogk8ZKVyl6iBDy6tEgRStNoZDoWi3meswFbkAj13N4DTOE3VNswdOt4Z*WIh32D65Rxei50TscBqI275nykCrUKeogSqOTlo18gY2DY0uhDSbhLr&new=1

先分享一个博客,我看这个博主写得挺深刻的,下面我提取一些我自己总结的也附上,hive的优化很多,这只能是根据经验一点点去测试总结进步了。

1.一般存为默认ORC格式,列式存储,会对数据进行压缩,查询会快些

2.给hive足够的cpu、内存,有钱多砸点准没错的

3.表要进行动态分区咯,年月日,查的时候尽量都带上,遍历的时候就可以少去扫描很多的文件夹,其实一个分区在hdfs里就是一个目录的作用

4.底层的平台配置,自己多去翻一翻资料,参数配置我就不说了,jvm的,内存的,cpu的,队列的,多线程的,应该有不少

5.查询的时候尽量把数据过滤掉少一点再关联其他表,这样可以防止数据倾斜,也可以减少hive表的计算时间

6.可以使用中间表,将查询分为多步,这样数据量就少了

7.查询的字段,查多少用多少咯

8.下面两个执行时可以加上

set hive.exec.parallel=true;   //允许不相关的任务
set hive.exec.parallel.thread.number=50;  //给该任务增加足够的cpu

9.小表关联大表就不说了吧,小表会加载到内存,大表加到内存不是很浪费么

10.一个查询尽量不要关联太多表,不然任务启动就很慢,可以分多次去查询,并行跑,这样说不定反而快点呢

11.一般来说数据太大了意义也不一定大,所以10亿差不多了,如果再分区存,取一些有用分区的就更少了,只要cpu和内存够,都慢不到那里去,不想砸钱的话,你再优化也快不到哪里去。另外一个就是,一般单表查询都不会慢的,而多表查询时,就是把单表的数据量尽量减少,然后再关联,这个原则任何情况下都适用。

原文地址:https://www.cnblogs.com/xinyumuhe/p/11956751.html