我打算将一些代码插入Hadoop 0.20.2中的TeraSort类的映射器中。但是,在查看源代码之后,我无法找到实现了映射器的段。
通常,我们将看到一个名为job.setMapperClass()的方法,该方法指示映射器类。但是,对于TeraSort,我只能看到setInputformat,setOutputFormat之类的内容。我找不到映射器和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(以前的身份映射器)和标准Reducer
这些是您通常从中继承的类。

基本上可以说,您只是从输入中发出所有内容,然后让Hadoop做自己的排序工作。因此排序是按“默认”进行的。

关于hadoop - 为什么不为hadoop TeraSort映射器/化简器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6565255/

10-16 02:39