hive使用技巧_巧用maojoin解决数据倾斜问题

Hive的MapJoin,在Join 操作在 Map 阶段完成,如果需要的数据在 Map 的过程中可以访问到则不再需要Reduce。
小表关联一个超大表时,容易发生数据倾斜,可以用MapJoin把小表全部加载到内存在map端进行join,避免reducer处理。

 

实则分析

 

  1. select c.channel_name,count(t.requesturl) PV  
  2.  from ods.cms_channel c  
  3.  join  
  4.  (select host,requesturl from  dms.tracklog_5min where day='20151111' ) t  
  5.  on c.channel_name=t.host  
  6.  group by c.channel_name  
  7.  order by c.channel_name;  
select c.channel_name,count(t.requesturl) PV
 from ods.cms_channel c
 join
 (select host,requesturl from  dms.tracklog_5min where day='20151111' ) t
 on c.channel_name=t.host
 group by c.channel_name
 order by c.channel_name;


上以为小表join大表的操作,可以使用mapjoin把小表放到内存中处理,语法很简单只需要增加 /*+ MAPJOIN(pt) */ ,把需要分发的表放入到内存中

 

 

  1. select /*+ MAPJOIN(c) */  
  2. c.channel_name,count(t.requesturl) PV  
  3.  from ods.cms_channel c  
  4.  join  
  5.  (select host,requesturl from  dms.tracklog_5min where day='20151111' ) t  
  6.  on c.channel_name=t.host  
  7.  group by c.channel_name  
  8.  order by c.channel_name;  
select /*+ MAPJOIN(c) */
c.channel_name,count(t.requesturl) PV
 from ods.cms_channel c
 join
 (select host,requesturl from  dms.tracklog_5min where day='20151111' ) t
 on c.channel_name=t.host
 group by c.channel_name
 order by c.channel_name;

 

这种用在出现数据倾斜时经常使用

 

参数说明:

1)如果是小表,自动选择Mapjoin:

  1. set hive.auto.convert.join = true; # 默认为false  
set hive.auto.convert.join = true; # 默认为false

该参数为true时,Hive自动对左边的表统计量,如果是小表就加入内存,即对 小表使用Map join

 


2)大表小表的阀值:

  1. set hive.mapjoin.smalltable.filesize;  
set hive.mapjoin.smalltable.filesize;

hive.mapjoin.smalltable.filesize=25000000
默认值是25mb

 

 

3)map join做group by 操作时,可以使用多大的内存来存储数据,如果数据太大,则不会保存在内存里

  1. set hive.mapjoin.followby.gby.localtask.max.memory.usage;  
set hive.mapjoin.followby.gby.localtask.max.memory.usage;

默认值:0.55

 

4)本地任务可以使用内存的百分比

  1. set hive.mapjoin.localtask.max.memory.usage;  
set hive.mapjoin.localtask.max.memory.usage;

默认值: 0.90

posted @ 2017-10-16 10:58  FanLei_Data  阅读(822)  评论(0)    收藏  举报