大数据-笔经(Spark数据倾斜)

18 篇文章 0 订阅
小赵在测试spark的时候,写了如下的代码:
do
lines = sc.textFile("data.txt")
pairs = lines.map(lambda s: (s, 1))
counts = pairs.groupByKey(lambda a, b: a + b)
结果运行时等待了一段时间直接报错,data.txt文件较大,小赵对其进行抽样后结果如下:
data
apple
apple
apple
new
name
apple
apple
work
as
请分析报错的原因以及解决方案
参考答案:

报错是由于数据倾斜导致的
数据倾斜的原因,由于key本身分布不均衡(重要),或者shuffle时的并发度不够,过多的数据在同一个task中运行,把executor撑爆。

解决方案(前三点任一)

1)隔离执行,将异常的key过滤出来单独处理,最后与正常数据的处理结果进行union操作。

2)对key先添加随机值,进行操作后,去掉随机值,再进行一次操作:
           将原始的 key 转化为 key + 随机值(例如Random.nextInt)
           对数据进行 reduceByKey(func)
           将 key + 随机值 转成 key
           再对数据进行 reduceByKey(func)
           
3)使用reduceByKey 代替 groupByKey,reduceByKey已经做过一次merge,节约了内存

4)调高shuffle的并行度
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值