Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Hadoop MapReduce中实现合并器?_Java_Hadoop_Mapreduce_Elastic Map Reduce - Fatal编程技术网

Java 如何在Hadoop MapReduce中实现合并器?

Java 如何在Hadoop MapReduce中实现合并器?,java,hadoop,mapreduce,elastic-map-reduce,Java,Hadoop,Mapreduce,Elastic Map Reduce,我理解在Hadoop MapReduce中包含一个合并器,包括以下几行(我已经做了) 我不明白的是,我到底在哪里实现组合器的功能。我是否在MyReducer下创建一个combine{}方法?如还原法 public void reduce(Text key, Iterator<IntWritable> values, OutputCollector<Text, IntWritable> output, Reporter reporter) throws IOExce

我理解在Hadoop MapReduce中包含一个合并器,包括以下几行(我已经做了)

我不明白的是,我到底在哪里实现组合器的功能。我是否在MyReducer下创建一个combine{}方法?如还原法

  public void reduce(Text key, Iterator<IntWritable> values,
  OutputCollector<Text, IntWritable> output, Reporter reporter) throws IOException { }
public void reduce(文本键、迭代器值、,
OutputCollector输出,报告器报告器)引发IOException{}

非常感谢

考虑到您的代码片段,您只需要像往常一样实现reduce()方法,这里没有什么特别的事情要做。但是,请记住,组合器功能是一种优化。这意味着Hadoop不能保证它会为特定的映射输出调用它多少次。它可能一点也不叫它


如果您检查类的API,您将找到reduce()方法。没有要重写的combine()或任何其他方法。

考虑到您的代码段,您只需要像往常一样实现reduce()方法,这里没有什么特别的事情要做。但是,请记住,组合器功能是一种优化。这意味着Hadoop不能保证它会为特定的映射输出调用它多少次。它可能一点也不叫它


如果您检查类的API,您将找到reduce()方法。没有combine()或任何其他要重写的方法。

Combiner应该只是一个
Reducer
,从而实现
Reducer
接口(没有
Combiner
接口)。将组合步骤视为
映射器
还原器
之间的一种中间缩减步骤

以单词计数为例。发件人:

字计数是组合器有用的主要示例。清单1--3中的单词计数程序为它看到的每个单词的每个实例发出一个(单词,1)对。因此,如果同一文档包含单词“cat”3次,则该对(“cat”,1)将发出3次;所有这些都将被发送到减速器。通过使用合路器,可将其压缩成一对(“cat”,3)并发送至减速器。现在,每个节点只为每个字向reducer发送一个值——大大减少了洗牌过程所需的总带宽,并加快了作业的速度。最好的一点是,我们不需要编写任何额外的代码来利用这一点!如果reduce函数既是交换函数又是结合函数,那么它也可以用作组合器


希望能有所帮助。

A
Combiner
应该只是一个
Reducer
,从而实现
Reducer
接口(没有
Combiner
接口)。将组合步骤视为
映射器
还原器
之间的一种中间缩减步骤

以单词计数为例。发件人:

字计数是组合器有用的主要示例。清单1--3中的单词计数程序为它看到的每个单词的每个实例发出一个(单词,1)对。因此,如果同一文档包含单词“cat”3次,则该对(“cat”,1)将发出3次;所有这些都将被发送到减速器。通过使用合路器,可将其压缩成一对(“cat”,3)并发送至减速器。现在,每个节点只为每个字向reducer发送一个值——大大减少了洗牌过程所需的总带宽,并加快了作业的速度。最好的一点是,我们不需要编写任何额外的代码来利用这一点!如果reduce函数既是交换函数又是结合函数,那么它也可以用作组合器


希望这能有所帮助。

我刚刚意识到我问了如何“实现减速器的功能”而不是“组合器”,很抱歉,它现在已经修复了。请你再回答一遍好吗?@ali取决于你的情况和数据。不能说我刚刚意识到我问过如何“实现减速器的功能”而不是“组合器”,很抱歉,它现在已经修复了。请你再回答一遍好吗?@ali取决于你的情况和数据。不能说
  public void reduce(Text key, Iterator<IntWritable> values,
  OutputCollector<Text, IntWritable> output, Reporter reporter) throws IOException { }