先分享一个博客,我看这个博主写得挺深刻的,下面我提取一些我自己总结的也附上,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和内存够,都慢不到那里去,不想砸钱的话,你再优化也快不到哪里去。另外一个就是,一般单表查询都不会慢的,而多表查询时,就是把单表的数据量尽量减少,然后再关联,这个原则任何情况下都适用。