【问题标题】:custom partitioner to send single key to multiple reducers?自定义分区器将单个键发送到多个减速器?
【发布时间】:2015-01-10 23:19:59
【问题描述】:

如果我只有一把钥匙。我可以避免将其仅发送到一个 reducer(并将其分发到多个 reducer)吗?

我知道那我可能需要第二个 map reduce 程序来组合 reducer 输出? 这是一个好方法吗?或者请告诉我是否有更好的方法?

【问题讨论】:

  • 你在使用哪个InputFormat

标签: hadoop bigdata skew hadoop-partitioning reducers


【解决方案1】:

我曾经遇到过类似的情况。我所做的是这样的:

int numberOfReduceCalls = 5
IntWritable outKey = new IntWritable();
Random random = new Random();
public void map(LongWritable key, Text value, Context context)
                      throws IOException, InterruptedException {
    // use a random integer within a limit
    outKey.set( random.nextInt(numberOfReduceCalls) );  
    context.write(outKey, value);
}

【讨论】:

  • 对不起,我没有得到你想要在这里做的事情。 “外键”的目的是什么?设置它的值后,您没有使用它。而且您似乎正在映射器本身中执行所有这些操作。你能解释一下吗?
  • 搞错了,更新context.write声明,看看。我没有编写自定义分区器,而是在映射中随机生成 5 个键,以便将值分配给 5 个不同的 reduce 调用。如果您使用TextinputFormat,上面的代码足以完成工作。在reduce 中,您将简单地忽略键,只处理值。
  • 所以这基本上是在模仿分区器功能而没有实际使用。我假设我们仍然需要第二个 map-reduce 来组合 reducer 输出。我会为此 +1 并等待看看是否还有其他方法。谢谢!
  • 当然还有其他方式,但我只是利用了map-reduce 功能本身,而不是引入一种新类型。但是在使用多个reducer时,无论如何都不能否认合并,这是不可避免的权衡。 stackoverflow.com/questions/5700068/…
猜你喜欢
  • 2015-01-15
  • 2017-02-26
  • 2023-03-31
  • 1970-01-01
  • 2017-07-03
  • 1970-01-01
  • 2017-02-26
  • 2013-08-01
  • 1970-01-01
相关资源
最近更新 更多