HIVE调优

实例1:

crl_1406_orderdetail         665061406840

crl_1406_orders                 326723658130

SQL代码:

select c1.sale_ord_id,c2.sale_ord_id
from crl_1406_orders c1
left outer join crl_1406_orderdetail c2
on c1.sale_ord_id = c2.sale_ord_id;

问题点1:job异常慢,可能reduce为1,这时可以设置reduce数,设置传输格式,并行等

set  mapred.output.compress=true;

set hive.exec.compress.output=true;

set mapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec;

set io.compression.codecs=org.apache.hadoop.io.compress.GzipCodecodec;

#设置20个reduces           set  mapred.reduce.tasks=200;

#设置并行                         set   hive.exec.parallel=true;

问题点2:raduce为1

1 没有使用group by                   2  使用了order by              3 笛卡尔积

问题3:如何欺骗hive分配reduce呢 ?

1 使用聚合函数 ,加 group by                 

2 然后小表放前面,大表一般往后排,从小到大,这样就能欺骗hive分配多个reduce,达到调优的效果

  设置并行对性能要求有点高,所以适度设置并行数量

问题4:并行参数,详设置

当参数为false时,三个job是顺序的执行   set  hive.exec.paralllel=false

当两个子查询的sql并无关系,可以并行的跑    set  hive.exec.parallel=true;

                                                                     hive>set hive.exec.paralllel.thread.number;  (默认并行数为8)

 

 

 转自 : http://my.oschina.net/repine/blog/279044

 

 

 

 

 

 

你可能感兴趣的:(HIVE调优)