HiveSql性能优化

一、解决数据倾斜

1. 过滤掉null部分

key值存在大量空字段,会hash到同一reduce,造成reduce长尾,将null 值过滤掉

举例: select user_id from logs where statdate = '20170815' where user_id is not null;

2. hive join倾斜:设置join skew参数解决

set hive.optimize.skewjoin = true;

set hive.skewjoin.key = skew_key_threshold (default = 100000);

3. hive group by distinct倾斜:设置skew参数

set hive.groupby.skewindata=true;

二、合理设置map和reduce的个数

1. 合理设置reduce的个数

set mapred.reduce.tasks = 15;

2. jvm重用

set Mapred.job.reuse.jvm.num.tasks = 10; (重用次数)

节约jvm 启动的时间

3. job间并行执行

set hive.exec.parallel=true; 默认并行度为 8,可以通过 hive.exec.parallel.thread.number参数调整

在有些情况下Job之间是可以并行的,典型的就是子查询。

当需要执行多个子查询union all或者join操作的时候,Job间并行就可以使用了。

例:如下可以并行的场景

select * from   
   (  
      select count(*) from logs   
      where log_date = 20170801 and item_id = 1  
      union all   
      select count(*) from logs   
      where log_date = 20170802 and item_id = 2  
      union all   
      select count(*) from logs   
      where log_date = 20170803 and item_id = 3  
   )t;

你可能感兴趣的:(Hive)