hive 数据倾斜 实例

任务长时间执行未果 (10000+ second)

查看日志:

[34m###*[Log]      [TASK PING]          : taskId=<111510244>, 6162 seconds[0m
[34m###*[Log]      [TASK PING]          : taskId=<111510244>, 6163 seconds[0m
INFO  : Map 1: 1/1	Map 10: 1/1	Map 11: 2/2	Map 17: 1/1	Map 18: 2/2	Map 24: 1/1	Map 25: 1/1	Map 28: 2/2	Map 30: 2/2	Reducer 12: 199(+1)/200	Reducer 13: 0(+200)/200	Reducer 14: 0/200	Reducer 15: 0/200	Reducer 16: 0/1	Reducer 19: 199(+1)/200	Reducer 2: 200/200	Reducer 20: 0(+200)/200	Reducer 21: 0/200	Reducer 22: 0/200	Reducer 23: 0/1	Reducer 26: 200/200	Reducer 29: 200/200	Reducer 3: 200/200	Reducer 31: 200/200	Reducer 4: 200/200	Reducer 5: 200/200	Reducer 6: 1/1	Reducer 8: 0/200	Reducer 9: 0/200	
INFO  : Map 1: 1/1	Map 10: 1/1	Map 11: 2/2	Map 17: 1/1	Map 18: 2/2	Map 24: 1/1	Map 25: 1/1	Map 28: 2/2	Map 30: 2/2	Reducer 12: 199(+1)/200	Reducer 13: 0(+200)/200	Reducer 14: 0/200	Reducer 15: 0/200	Reducer 16: 0/1	Reducer 19: 199(+1)/200	Reducer 2: 200/200	Reducer 20: 0(+200)/200	Reducer 21: 0/200	Reducer 22: 0/200	Reducer 23: 0/1	Reducer 26: 200/200	Reducer 29: 200/200	Reducer 3: 200/200	Reducer 31: 200/200	Reducer 4: 200/200	Reducer 5: 200/200	Reducer 6: 1/1	Reducer 8: 0/200	Reducer 9: 0/200	
[34m###*[Log]      [TASK PING]          : taskId=<111510244>, 6164 seconds[0m
[34m###*[Log]      [TASK PING]          : taskId=<111510244>, 6165 seconds[0m

发现reducer 12 13 19 20 很久没有执行完


explain sql 代码,查看reducer12是什么任务:

hive 数据倾斜 实例

原来在with as 就出问题了:

with trfc as (
    select distinct
        t1.topicdate
        ,t1.cid
        ,case when t2.sex is null or lower(t2.sex) in ('','null') then 'unknown'
        else lower(t2.sex) end as gender 
        ,case when t2.platform is null or lower(t2.platform) in ('','null') then 'unknown'
        else lower(t2.platform) end as platfm 
        ,case when t2.province_cn in ('上海','北京','天津','重庆') then concat(t2.province_cn, '市')
        when t2.province_cn is not null then t2.province_cn
        else 'unknown' end as prov 
        ,case when t2.city_cn in ('上海','北京','天津','重庆') then concat(t2.city_cn, '市')
        when t2.city_cn is not null then t2.city_cn
        else 'unknown' end as ct
        ,case when t2.model is null or lower(t2.model) in ('','null') then 'unknown'
        when t2.model_cn is not null then t2.model_cn
        else lower(t2.model) end as mdl 
        ,t1.wid
    from d_extra.dw_trfc_saashw_base t1  
    inner join d_extra.dm_usr_hw_wid_msg t2 on ( t1.cid = t2.cid and t1.wid = t2.wid )
    where t1.topicdate <= '{4}' and t1.topicdate >= '{6}'
    and t1.wid is not null

)


然后看看是哪个表出问题:

select 
nvl(cid,'nnn')as cid,
count(*) as cnt
from d_extra.dw_trfc_saashw_base t1  
where topicdate = '2018-05-16'
and wid is not null
group by nvl(cid,'nnn')
order by cnt desc

limit 50

结果无异常。


select 
cid, wid,
count(*) as cnt
from d_extra.dm_usr_hw_wid_msg 
group by cid, wid
order by cnt desc

limit 50

结果异常:

hive 数据倾斜 实例