1

试图获得与键数一样多的减速器

public class CustomPartitioner extends Partitioner<Text, Text>
{
    public int getPartition(Text key, Text value,int numReduceTasks)
   {
        System.out.println("In CustomP");
       return (key.toString().hashCode()) % numReduceTasks;
   }
} 

驱动类

job6.setMapOutputKeyClass(Text.class);
job6.setMapOutputValueClass(Text.class);
job6.setOutputKeyClass(NullWritable.class);
job6.setOutputValueClass(Text.class);
job6.setMapperClass(LastMapper.class);
job6.setReducerClass(LastReducer.class);
job6.setPartitionerClass(CustomPartitioner.class);
job6.setInputFormatClass(TextInputFormat.class);
job6.setOutputFormatClass(TextOutputFormat.class);

但我将 ootput 放在一个文件中。

我做错什么了吗

4

4 回答 4

2

如果不指定它,您将无法控制减速器的数量:-)。但是仍然不能保证在不同的 reducer 上获取所有键,因为您不确定在输入数据中会获得多少不同的键,并且您的哈希分区函数可能会为两个不同的键返回相同的数字。如果你想实现你的解决方案,那么你必须提前知道不同键的数量,然后相应地修改你的分区函数。

于 2014-06-17T11:02:51.587 回答
1

您需要指定等于键数的reduce任务数,还需要根据分区器类中的键返回分区。例如,如果您的输入有 4 个键(这里是木头、砌体、钢筋混凝土等),那么您的 getPartition 方法如下所示。

 public int getPartition(Text key, PairWritable value, int numReduceTasks) {
        // TODO Auto-generated method stub

        String s = value.getone();

        if (numReduceTasks ==0){
            return 0;
        }

        if(s.equalsIgnoreCase("wood")){

            return 0;
        }

        if(s.equalsIgnoreCase("Masonry")){
            return 1%numReduceTasks;
        }

        if(s.equalsIgnoreCase("Reinforced Concrete")){
            return 2%numReduceTasks;
        }
        if(s.equalsIgnoreCase("Reinforced Masonry")){
            return 3%numReduceTasks;
        }

        else
            return 4%numReduceTasks;

    }   

}

相应的输出将收集在各自的减速器中。尝试在 CLI 中运行而不是 eclipse

于 2014-06-17T13:07:06.970 回答
0

您尚未配置要运行的减速器数量。
您可以使用以下 API 对其进行配置

job.setNumReduceTasks(10); //根据你的集群改变数字

此外,您可以在从命令行执行时设置

-D mapred.reduce.tasks=10

希望这可以帮助。

于 2014-06-17T10:34:47.060 回答
0

Veni,您需要按以下方式链接任务

Mapper1 --> Reducer --> Mapper2 (Post Processing Mapper which creates
file for Each key)

Mapper 2的InputFormat应该是NlineInputFormat,所以reducer的输出就是每个key都会有对应的mapper,Mapper的输出会是每个key的单独文件。

Mapper 1 和 Reducer 是您现有的 MR 工作。

希望这可以帮助。

干杯
纳格

于 2014-06-22T22:48:38.917 回答