数据倾斜

数据倾斜在分布式计算中表现为任务进度停滞在90%至100%,部分节点因数据集中而成为热点。这种情况由计算能力不均和数据分布不均引起。解决方案包括:过滤空值、数据类型转化、设置map端聚合、优化Count Distinct操作以及使用MapJoin。此外,针对小文件过多、单个文件过大和map端计算量大的问题,可以通过调整MapReduce参数来优化。
摘要由CSDN通过智能技术生成

什么是数据倾斜

在进行分布式计算时,某些节点的计算能力比较强或者需要计算的数据比较少,因此这些节点的任务早早地执行完成;然而另一些节点的计算能力较差或需要计算的数据比较多时,这些节点的任务没有执行完成。这种因为计算能力不均或数据分布不均造成数据热点(数据大量集中在某些节点)情况。
主要表现为:任务进度一直维持在90% - 99%~100%附近,通过任务监控器查看仅有少数几个Reduce子任务未完成。

产生数据倾斜的情况及原因

关键词 场景 后果
JOIN 表的数据量小,但key集中 分发到某一个或几个Reduce的数据远高于平均值
大表 JOIN 大表,但分桶判断字段0值或空值过多 空值通常由一个Reduce处理,因此非常慢
Group by group by维度过小,某值的数量过多 处理数量过多的某值Reduce非常耗时
Count Distinct 某特殊值过多 处理此特殊值Reduce非常耗时

处理办法

1. 空值过多产生的数据倾斜
【例子】A & B表按user_id进行关联,但user_id中存在较多空值
【解决1】过滤空值行。

select *
from(
	select user_id, column_namesA
	from table_A) a
JOIN
	(select user_id, column_namesB
	from table_B) b
on a.user_id = b.user_id
and a.user_id is not null
;

【解决2】空值赋予新key值

select *
from(
	select user_id , column_namesA
	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值