我试图确定hadoop api(hadoop 2.0.0 mrv1)中是否有某些可用的钩子来处理减速器的数据偏斜。 场景:使用自定义Composite键和分区器将数据路由到reducer。为了处理奇怪的情况,但非常可能的情况是一百万个密钥和大值结束在同一个reducer上需要某种启发式,以便这些数据可以进一步分区以产生新的reducer。 我在考虑一个两步过程
有更好的方式/另一种方式吗?
可能的反解决方法可能是编写映射器的输出并旋转另一个执行reducer工作的map工作,但不想对namenode加压。
答案 0 :(得分:2)
我想到了这个想法,我不确定它有多好。
假设您正在使用10个映射器运行Job,由于数据偏差而导致失败。我们的想法是,您将reducer的数量设置为15,并定义每个映射器中一个reducer的最大数量(key,value)。您将该信息保存在自定义分区器类的哈希映射中。一旦特定的减速器达到极限,你就开始将另一组(键,值)对从我们为处理偏斜而保留的额外5减速器发送到另一个减速器。
答案 1 :(得分:1)
如果您处理允许,使用Combiner(缩减类型功能)可以帮助您。如果您在Mapper端预先聚合数据。然后,即使您的所有数据都在同一个reducer中结束,也可以管理数据量。
另一种方法是重新实现分区,以避免出现偏斜情况。