Hive 实战优化策略

2018-06-14更新:更新8

Hive 在大数据执行时,真的是很慢,跑一张表经常就是跑几个小时,一天下来跑不了几张表,通过一段时间学习,总结几个常用的Hive 优化方法,希望对新手有点帮助,我也是新手,博客存在问题的地方,请大家批评指正,共同学习、进步,谢谢!

hive  -f  /路径/filename 执行打包文件,可以在下班之后,确保代码没有问题的情况下,打包执行,第二天再来看结果,可能也会快一点

1、增加Reduce数量:通过set mapred.reduce.tasks=2000;将reduce数量增加,提高执行效率,而map的数据无法变更的,需要调整map的存储容量,这个在配置文件里面,一般最大容量是256M;

2、set hive.fetch.task.conversion=more 调整Hive 执行方式,查sample数据时,不需要执行mapreduce,能够加快速度,或者desc table 查看相关字段,也是一个办法

3、set hive.auto.convert.join=true 优化小表、大表连接;通过这种方式,能够将小表优先放置内存中,提高查询速度,而不是在join 过程中反复查询大表

4、set Hive.optimize.skewjoin = True; 应对表倾斜情况,在join的过程中;

5、切换队列,如果有临时需求,或者任务比较紧急,可以切换队列,提高任务执行优先级,但是常规任务不推荐使用,因为资源毕竟有限;set mapped.queue.name=name;静态设置

动态执行切换:yarn application  -movetoqueue application_1522570304151_334926(任务执行id) 

 -queue  queuename

6、并行多个map,如果在map之间不存在关联关系的情况下,设置:set exec.parallel=true,但是同样会消耗大量资源,请谨慎使用!或者用UNION ALL 进行合并操作

7、语句优化:能用join的就尽量join,left outer join 要少用,特别是在大、小表关联的情况下,慎重选择。至于去重:distinct 要少用,因为这个会导致仅仅使用一个reduce。可以用group by去重。

8、数据倾斜也是影响mr执行速度的一个重要原因,尽管可能设置reduce=较大数,但是还是可能存在倾斜情况,可以尝试 set hive.groupby.skewindata=true 从而达到负载均衡的目的,加快执行速度;

以上是一些常规的优化方法,1、2、3比较常用,4、5请谨慎使用,毕竟资源是有限的,切勿造成资源浪费,影响整个公司任务进度;

欢迎转载,请注明地址。

你可能感兴趣的:(Hive)