数据倾斜解决方案之提高shuffle操作reduce并行度

提高shuffle操作的reduce并行度

 

将reduce task的数量,变多,就可以让每个reducetask分配到更少的数据量,这样的话,也许就可以缓解,或者甚至是基本解决掉数据倾斜的问题

 

提升shuffle reduce端并行度,怎么来操作

很简单,主要给我们所有的shuffle算子,比如groupByKey,countByKey,reduceByKey,在调用的时候,传入进去一个参数,一个数字,那个数字,就代表了那个shuffle操作的reduce端的并行度,那么在进行shuffle操作的时候,就会对应着创建指定数量的reduce task.

这样的话,就可以让每个reduce task分配到更少的数据,基本上可以缓解数据倾斜的问题,比如说,原本某个task分配数据特别多,直接OOM,内存溢出了,程序没法运行,直接挂掉。按照log,找到发生数据倾斜的shuffle操作,给它传入一个并行度数字,这样的话,原先那个task分配到的数据,肯定会变少,就至少可以避免OOM的情况,程序至少是可以跑起来。

 

1. 如果最理想的情况下,提升并行度以后,减轻了数据倾斜的问题,或者甚至可以让数据倾斜的现象忽略不计,那么就最好,就不用做其他的数据倾斜的解决方案了

2. 不太理想的情况下,就是比如之前某个task运行特别慢,要5个小时,现在稍微快了一点,变成了4个小时,或者是原先运行到某个task,直接OOM,现在至少不会OOM,但是那个task运行特别慢,要5个小时才能跑完

那么,如果出现第二种情况的话,就立即放弃这种,选择后边的方案

 

具体的操作

//计算各个品类的点击个数,如果某个品类点击了1000万次,其他品类点击了10万次,也会出现数据倾斜

rdd.reduceByKey(new function(),1000)这样写就可以,这时reduce端的task就是1000个

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值