Hadoop密钥组合和组合器

Hadoop密钥组合和组合器,hadoop,hadoop-streaming,hadoop2,hadoop-partitioning,hadoop-plugins,Hadoop,Hadoop Streaming,Hadoop2,Hadoop Partitioning,Hadoop Plugins,我正在Hadoop 2.6.0中进行第二次排序,我将遵循本教程: 我有完全相同的代码,但现在我正试图提高性能,所以我决定添加一个组合器。我添加了两个修改: 主文件: job.setCombinerClass(CombinerK.class); 组合器文件: public class CombinerK extends Reducer<KeyWritable, KeyWritable, KeyWritable, KeyWritable> { public void red

我正在Hadoop 2.6.0中进行第二次排序,我将遵循本教程:

我有完全相同的代码,但现在我正试图提高性能,所以我决定添加一个组合器。我添加了两个修改:

主文件:

job.setCombinerClass(CombinerK.class);
组合器文件:

public class CombinerK extends Reducer<KeyWritable, KeyWritable, KeyWritable, KeyWritable> {

    public void reduce(KeyWritable key, Iterator<KeyWritable> values, Context context) throws IOException, InterruptedException {


        Iterator<KeyWritable> it = values;

        System.err.println("combiner " + key);

        KeyWritable first_value = it.next();
        System.err.println("va: " + first_value);

        while (it.hasNext()) {

            sum += it.next().getSs();

        }
        first_value.setS(sum);
        context.write(key, first_value);


    }
}

组合器似乎正在执行,但它似乎一直在接收每个键的调用,因此它在输入中的编号与输出中的编号相同。

您不能真正使用组合输入和输出记录,但这表明组合器正在运行。但在输入和输出记录的数量上,可能在单个映射器中您没有相同的键。您可以阅读以获得有关组合器的更多信息。@VigneshI我创建了多个映射器以增大文件大小,我发送了相同的K,V以进行检查。我用相同的参数复制了行context.write。由于这个原因,正如我所知,我已经发送了相同的K,V,我认为我的keycomposite需要实现一些方法或类似的东西,以便检查是否相等。除了日志中的合并输入和输出记录计数之外,您不会得到任何提示。在组合器中放置一个sysout并运行MR作业,只需在reduce端的jobtracker URL中检查stdout日志。@VigneshI我以前检查过,但它也不起作用。谢谢你的帮助。
    Combine input records=4040000
    Combine output records=4040000