mapreduce数据不平衡时的处理方法

用mr处理大数据经常遇到数据不平衡的情况,这里的数据不平衡指的是,数据中有少部分key集中了大量的数据,导致其它的reduce都运行完了,只剩几个reduce在跑。这种情况一般有如下三种解决方法(原理都差不多)。

1、重写partitioner

  如果一个key对应的数据过过,那么可以在partitioner中对这个key进行分箱。通常做法是,在hash(key)后面加上一个字符串或数字,来把相同的key分发到不同的reduce中去。这里需要注意的是分多少个箱要估计一下,一般情况下,可根据key对应的数据规模粗略算一下,与其它的key的规模差不多即可,如果不知道规模的话,那就试验几个好了。这么做有一个问题,就是如果这个key的数据如果要与其它数据关联,则比较麻烦了,如果不想之后再写一个job处理,那么就需要把另一份数据也按照这个partitioner的分发方式分发。这会导致另一份数据产生大量冗余,如果另一份数据量大的话,推荐还是再写一个job进行关联。否则suffile阶段压力太大。

2、combiner

  combiner运行的意义就是使map的输出更紧凑,使得写到本地磁盘和传给reduce的数据更少。这个不多说了。

3、根据业务

  a、根据业务找出一个重复少,可以把当前key分箱的字段。把key与这个字段组合成新key。(原理与重写partitioner相似)

    b、拆分成多步处理。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值