为什么不为hadoop TeraSort提供mapper/reducer呢?



我计划在Hadoop 0.20.2中插入一些代码到TeraSort类的映射器中。然而,在审查源代码后,我找不到实现mapper的段。通常,我们将看到一个名为job.setMapperClass()的方法,它指示映射器类。然而,对于TeraSort,我只能看到settinputformat setOutputFormat这样的东西。我找不到mapper和reduce方法在哪里被调用?有谁能给点提示吗?谢谢,源代码是这样的,

public int run(String[] args) throws Exception {
   LOG.info("starting");
   JobConf job = (JobConf) getConf();
   Path inputDir = new Path(args[0]);
   inputDir = inputDir.makeQualified(inputDir.getFileSystem(job));
   Path partitionFile = new Path(inputDir, TeraInputFormat.PARTITION_FILENAME);
   URI partitionUri = new URI(partitionFile.toString() +
                           "#" + TeraInputFormat.PARTITION_FILENAME);
   TeraInputFormat.setInputPaths(job, new Path(args[0]));
   FileOutputFormat.setOutputPath(job, new Path(args[1]));
   job.setJobName("TeraSort");
   job.setJarByClass(TeraSort.class);
   job.setOutputKeyClass(Text.class);
   job.setOutputValueClass(Text.class);
   job.setInputFormat(TeraInputFormat.class);
   job.setOutputFormat(TeraOutputFormat.class);
   job.setPartitionerClass(TotalOrderPartitioner.class);
   TeraInputFormat.writePartitionFile(job, partitionFile);
   DistributedCache.addCacheFile(partitionUri, job);
   DistributedCache.createSymlink(job);
   job.setInt("dfs.replication", 1);
   // TeraOutputFormat.setFinalSync(job, true);                                                                                                                                                                                             
   job.setNumReduceTasks(0);
   JobClient.runJob(job);
   LOG.info("done");
   return 0;
 }

对于其他类,如TeraValidate,可以找到如下代码:

job.setMapperClass(ValidateMapper.class);
job.setReducerClass(ValidateReducer.class);

我没有看到TeraSort有这样的方法。

谢谢,

为什么排序需要为它设置MapperReducer类?

默认为标准的Mapper(以前的identity Mapper)和标准的Reducer。这些是您通常继承的类。

你基本上可以说,你只是从输入中发出所有东西,让Hadoop自己进行排序。所以排序是默认的

Thomas的回答是正确的,即mapper和reducers是相同的,因为在应用reduce函数之前对洗牌数据进行了排序。terasort的特殊之处在于它的自定义分区器(它不是默认的哈希函数)。您应该从这里阅读更多关于Hadoop的Terasort实现。它规定

"TeraSort是一个标准的map/reduce排序,除了一个自定义分区,它使用N−1个采样键的排序列表来定义每个reduce的键范围。特别地,所有使sample[i−1]<= key <sample[i]被发送到reduce>

相关内容

  • 没有找到相关文章

最新更新