数据倾斜的表现
表现体现在数据处理任务进度长时间维持在 99%(或100%),查看任务监控页面,发现只有少量(1 个或几个)reduce
子任务未完成。因为其处理的数据量和其他 reduce
差异过大。单一 reduce
的记录数与平均记录数差异过大,通常可能达到 3 倍甚至更多,最长时长远大于平均时长。
倾斜产生的原因及解决办法
空值产生的数据倾斜
果两个表连接时,使用的连接条件有很多空值,会造成有 null 关联的那个分区数据特别多,可以在连接条件中增加过滤,去除空值。
select *
from user join log on user.id = log.userid and log.userid is not null
大小表连接
看这个join
到底是 map
端的 join
还是reduce
端的 join,map
端的 join
效率高、并行度高,不容易产生数据倾斜,map
端的join
擅长大小表关联,此时将小表放在内存里,在map
端做join
。
select /*+mapjoin(a)*/,b.*
from a join b on a.** = b.**
码字不易废话两句:有需要python学习资料的或者有技术问题交流 “点击”即可
两个表连接的数据字段不一致
将连接条件的字段数据类型转化成一致。
elect * from users a
left join logs b
on a.usr_id = cast(b.user_id as string)
以上就是小编今天为大家带来的内容,小编本身就是一名python开发工程师,我自己花了三天时间整理了一套python学习教程,从最基础的python脚本到web开发,爬虫,数据分析,数据可视化,机器学习,等,这些资料有想要的小伙伴 " 点击 " 即可领取