Hadoop处理reducer中的数据偏差

时间:2015-09-17 10:13:39

标签: hadoop hadoop-partitioning reducers

我试图确定hadoop api(hadoop 2.0.0 mrv1)中是否有某些可用的钩子来处理减速器的数据偏斜。 场景:使用自定义Composite键和分区器将数据路由到reducer。为了处理奇怪的情况,但非常可能的情况是一百万个密钥和大值结束在同一个reducer上需要某种启发式,以便这些数据可以进一步分区以产生新的reducer。 我在考虑一个两步过程

  1. 设置mapred.max.reduce.failures.percent说10%然后让工作     完成
  2. 通过传递a来重新运行失败数据集上的作业     通过驱动程序配置将导致我的分区程序     然后随机分割偏斜的数据。分区器会     实现Configurable接口。
  3. 有更好的方式/另一种方式吗?

    可能的反解决方法可能是编写映射器的输出并旋转另一个执行reducer工作的map工作,但不想对namenode加压。

2 个答案:

答案 0 :(得分:2)

我想到了这个想法,我不确定它有多好。

假设您正在使用10个映射器运行Job,由于数据偏差而导致失败。我们的想法是,您将reducer的数量设置为15,并定义每个映射器中一个reducer的最大数量(key,value)。您将该信息保存在自定义分区器类的哈希映射中。一旦特定的减速器达到极限,你就开始将另一组(键,值)对从我们为处理偏斜而保留的额外5减速器发送到另一个减速器。

答案 1 :(得分:1)

如果您处理允许,使用Combiner(缩减类型功能)可以帮助您。如果您在Mapper端预先聚合数据。然后,即使您的所有数据都在同一个reducer中结束,也可以管理数据量。

另一种方法是重新实现分区,以避免出现偏斜情况。