2013-10-14 2 views
1

Я совершенно не знаком с концепцией totalorderpartitioner, я применил эту концепцию, но im не удалось создать глобальную сортировку. это моя входная запись полный порядок разделитель в hadoop

676576 
7489768576 
689576857867857 
685768578678578675 
765897685789675879679587 
1 
5 
6 
7 
8 
9 
0 
2 
3 
5 
6 
9 

это мой картографа

public void map(LongWritable key, Text value, 
      OutputCollector<NullWritable, Text> outputCollector, Reporter reporter) throws IOException { 
     // TODO Auto-generated method stub 
     outputCollector.collect(NullWritable.get(),value); 

    } 

это мой редуктор

public void reduce(NullWritable key, Iterator<Text> values, 
      OutputCollector<NullWritable, Text> outputCollector, Reporter reporter) throws IOException { 
     // TODO Auto-generated method stub 
     while (values.hasNext()) { 
      Text text = (Text) values.next(); 
      outputCollector.collect(key,text); 

     } 

    } 

это моя связаны работы код

JobConf jobConf = new JobConf(); 
jobConf.setMapperClass(TotalOrderMapper.class); 
jobConf.setReducerClass(TotalOrderReducer.class); 
jobConf.setMapOutputKeyClass(NullWritable.class); 
jobConf.setMapOutputValueClass(Text.class); 
jobConf.setOutputKeyClass(NullWritable.class); 
jobConf.setOutputValueClass(Text.class); 
jobConf.setPartitionerClass(TotalOrderPartitioner.class); 
jobConf.setInputFormat(TextInputFormat.class); 
jobConf.setOutputFormat(TextOutputFormat.class); 
FileInputFormat.addInputPath(jobConf, new Path("hdfs://localhost:9000/totalorderset.txt")); 
FileOutputFormat.setOutputPath(jobConf, new Path("hdfs://localhost:9000//sortedRecords5.txt")); 
Path pa = new Path("hdfs://localhost:9000//partitionfile","_partitions.lst"); 
TotalOrderPartitioner.setPartitionFile(jobConf, 
     pa); 
InputSampler.writePartitionFile(jobConf, 
     new InputSampler.RandomSampler(1,1)); 
JobClient.runJob(jobConf); 

но записи не сортируются. Это мой выход ут

676576 
7489768576 
689576857867857 
685768578678578675 
765897685789675879679587 
1 
5 
6 
7 
8 
9 
0 
2 
3 
5 
6 
9 

я не знаю, где IAM собирается wrong.could кто-нибудь помочь мне разобраться в проблеме? и может кто-нибудь сказать мне, как inputsampling работает точно here.thanks заранее

ответ

2

MapReduce виды на ключ, так как вы сортировка nullwritable вы делаете не сортировку вообще:

outputCollector.collect(NullWritable.get(),value); 

ваши карты выходных ключи должны быть вашими inputvalues!

Можете ли вы дать это попробовать и сообщить нам, если это трюк?

Второе примечание: используйте IntWritable вместо текста иначе сортировка будет лексикографически!

Смежные вопросы