在mapreduce中怎样解决数据倾斜

在mapreduce聚合key中所有values的时候,如果一个key对应了很多values,就会产生数据倾斜的问题。这里介绍了一个处理数据倾斜的小技巧,以两个mapper为例:

一个mapper中添加:

//id分裂
Random random = new Random();
int num = random.nextInt(StaticCommonInfo.ID_SPLIT_NUM);

if (!StringUtil.isBlank(deleted) && "0".equals(deleted)
&& !StringUtil.isBlank(picPath) && "0".equals(type)) {
arrayPicPath = picPath.split("/");
SortKeyWritable sortKeyWritable = new SortKeyWritable();
sortKeyWritable.key = dirId + new Integer(num).toString();
sortKeyWritable.value = StaticCommonInfo.IMG_INFO_SIGN;
output.collect(sortKeyWritable,
new Text(arrayPicPath[arrayPicPath.length - 1] + StaticCommonInfo.IMG_INFO_SIGN));
}

另一个mapper中添加:

//id分裂
int[]splitArray = new int[StaticCommonInfo.ID_SPLIT_NUM];
for(int i = 0;i < splitArray.length; i++){
sortKeyWritable.key = id + new Integer(i).toString();
if(ImgSpaceUtil.isSemanticKey(hashModelTable, name)){
sortKeyWritable.value = StaticCommonInfo.MODEL_TABLE;
output.collect(sortKeyWritable, new Text(StaticCommonInfo.MODEL_TABLE));
}else if(ImgSpaceUtil.isSemanticKey(hashDetailTable, name)){
sortKeyWritable.value = StaticCommonInfo.DETAIL_TABLE;
output.collect(sortKeyWritable, new Text(StaticCommonInfo.DETAIL_TABLE));
}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值