hive优化(4)之mapjoin和union all避免数据倾斜
来源:互联网 发布:intellij idea python 编辑:程序博客网 时间:2024/05/17 22:36
发生数据倾斜时,通常的现象是:
- 任务进度长时间维持在99%(或100%),查看任务监控页面,发现只有少量(1个或几个)reduce子任务未完成。
- 查看未完成的子任务,可以看到本地读写数据量积累非常大,通常超过10GB可以认定为发生数据倾斜。
数据倾斜一般是由于代码中的join或group by或distinct的key分布不均导致的,大量经验表明数据倾斜的原因是人为的建表疏忽或业务可以规避的。如果确认业务需要这样倾斜的逻辑.
- 对于join,使用map join,即在查询头添加map join hint,例如
select /*+MAPJOIN(b)*/ * from a join b on a.id =b.id
将会把join转换为mapjoin,且将b表作为小表处理。
- 对于group by或distinct,使用两次MR优化,即设定参数: hive.groupby.skewindata=true
- 随机数解决数据倾斜
二、MAPJOIN 结合 UNIONALL
原始sql:
select a.*,coalesce(c.categoryid,’NA’) as app_category
from (select * from t_aa_pvid_ctr_hour_js_mes1
) a
left outer join
(select * fromt_qd_cmfu_book_info_mes
) c
on a.app_id=c.book_id;
速度很慢,老办法,先查下数据分布。
select *
from
(selectapp_id,count(1) cnt
fromt_aa_pvid_ctr_hour_js_mes1
group by app_id) t
order by cnt DESC
limit 50;
数据分布如下:
NA 617370129
2 118293314
1 40673814
d 20151236
b 1846306
s 1124246
5 675240
8 642231
6 611104
t 596973
4 579473
3 489516
7 475999
9 373395
107580 10508
我们可以看到除了NA是有问题的异常值,还有appid=1~9的数据也很多,而这些数据是可以关联到的,所以这里不能简单的随机函数了。而t_qd_cmfu_book_info_mes这张app库表,又有几百万数据,太大以致不能放入内存使用mapjoin。
解决方案:
select a.*,coalesce(c.categoryid,’NA’) as app_category
from –if app_id isnot number value or <=9,then not join
(select * fromt_aa_pvid_ctr_hour_js_mes1
where cast(app_id asint)>9
) a
left outer join
(select * fromt_qd_cmfu_book_info_mes
where cast(book_id asint)>9) c
on a.app_id=c.book_id
union all
select /*+ MAPJOIN(c)*/
a.*,coalesce(c.categoryid,’NA’) as app_category
from –if app_id<=9,use map join
(select * fromt_aa_pvid_ctr_hour_js_mes1
wherecoalesce(cast(app_id as int),-999)<=9) a
left outer join
(select * fromt_qd_cmfu_book_info_mes
where cast(book_id asint)<=9) c
–if app_id is notnumber value,then not join
on a.app_id=c.book_id
首先将appid=NA和1~9的数据存入一组,并使用mapjoin与维表(维表也限定appid=1~9,这样内存就放得下了)关联,而除此之外的数据存入另一组,使用普通的join,最后使用union
all 放到一起。
- hive优化(4)之mapjoin和union all避免数据倾斜
- Hive优化---mapjoin和union all避免数据倾斜
- Hive mapjoin使用(数据倾斜优化)
- Hive优化(3)之随机数避免数据倾斜
- Hive优化----利用随机数避免数据倾斜
- Hive 之 数据倾斜优化
- hive优化(1)之mapjoin
- hive数据倾斜优化
- hive 随机数避免数据倾斜
- 大数据Spark “蘑菇云”行动第100课:Hive性能调优之企业级Join、MapJoin、GroupBy、Count、数据倾斜彻底解密和最佳实践
- hive使用技巧(四)——巧用MapJoin解决数据倾斜问题
- hive union (all)
- Hive优化----MapJoin 优化
- hive 数据倾斜查询优化
- hive--Hive之数据倾斜的原因和解决方法
- Hive join优化(mapjoin,streamtable)
- hive MapJoin优化
- Hive MapJoin 优化
- C#中字符串与字节数组互换的几种编码问题
- 【知】IE8下无法正常显示PNG图片
- java正则表达式
- boost_1_51_0库的安装
- Hibernate学习笔记(3)
- hive优化(4)之mapjoin和union all避免数据倾斜
- SQL 类型到Java 类型的映射关系
- 【知】XP时间无法同步(rpc服务器不可用)
- Oracle 特殊查询(DDL)
- 矩阵键盘——线反转法控制
- hive cli
- LaTeX双栏版面的跨栏浮动环境
- 【JAVA】运行时提示找不到或无法加载主类
- div显示隐藏效果