大数据之SparkHive在生产实际中的如何优雅的解决数据倾斜的问题

10 篇文章 0 订阅
面对大数据任务中shuffle失败的问题,本文提出通过关联字段加随机数解决数据倾斜。作者详细介绍了如何在业务、规则和定位信息表中添加随机数,并强调了处理后的数据还原过程。最终目标是提升任务执行效率并确保正确结果。
摘要由CSDN通过智能技术生成

问题: 原数据匹配事件名称、定位信息,因某个字段对应的数据条数特别多,任务运行时间较长,在shuffle时总是失败。

报错信息:

ShuffleMapStage has failed the maxinum allowable number of times
Caused by :io.netty.utile.internal.OutOfDirectMemoryError:failed to allocate 16777216 bytes of direct memory(used:3741319168,max:3750756352)

好家伙数据量还挺大,任务运行这么久还要报错,顿时来气,那就上刀子一步到位,把数据倾斜问题解决了吧。

**方案:通过关联条件字段的拼接随机数进行加盐,扩容小表的匹配字段,最后记得去除添加的随机数,还原数据,才是正确结果**

睁大眼睛好好看,关联表那就加上随机数,具体实施:

  1. 业务表:
select
concat_ws('_',event_id,cast(rand() * 1000% 6 as int)) as event_id,
concat_ws('_',s_ip_string,cast(rand() * 1000 % 6 as int)) as s_ip_string,
concat_ws('_',d_ip_string,cast(rand() * 1000 % 6 as int)) as d_ip_string,
s_port,
d_port,
c_time
from atable
  1. 规则表:
select
concat_ws('_',event_id,num) as event_id,
event_name,
from btable
lateral view explode(split('1,2,3,4,5,6,7,8,9,0',',')) tp as num
#tp是临时表名
  1. 定位信息表:
select
concat_ws('_',ip,num) as ip,
company,
city
from ctable
lateral view explode(split('1,2,3,4,5,6,7,8,9,0',',')) tp as num

随机数添加好了,shuffle的时候就可以很均匀的分配任务到executor了吧

最后记得记得记得,重要事说三遍!!
还没结束呢,需要处理一下!

select
split(event_id,_)[0] as event_id,
event_name,
split(s_ip_string,_)[0] as s_ip_string,
s_city,
s_company,
split(d_ip_string,_)[0] as d_ip_string,
d_city,
d_company,
d_port,
s_port,
time
from 
a

小朋友,你学fei了吗?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大数据学习僧

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值