1

Hadoop 0.20.2 の TeraSort クラスのマッパーにコードを挿入する予定です。しかし、ソース コードを確認した後、マッパーが実装されているセグメントを見つけることができません。通常、マッパー クラスを示す job.setMapperClass() というメソッドが表示されます。ただし、TeraSort については、setInputformat、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 ではそのようなメソッドは見当たりません。

ありがとう、

4

2 に答える 2

3

MapperソートでReducerクラスを設定する必要があるのはなぜですか?

デフォルト値は、標準Mapper(以前のIDマッパー)と標準Reducerです。これらは通常、継承するクラスです。

基本的には、入力からすべてを出力し、Hadoopに独自のソート処理を実行させると言うことができます。したがって、並べ替えは「デフォルト」で機能します。

于 2011-07-04T05:32:15.870 に答える
1

トーマスの答えは正しいです。つまり、リデュース関数を適用する前にシャッフルされたデータがソートされるため、マッパーとリデューサーはアイデンティティです。terasort の特別な点は、そのカスタム パーティショナー (デフォルトのハッシュ関数ではない) です。詳細については、Hadoop の Terasort の実装を参照してください。それは述べています

「TeraSort は、reduce ごとにキー範囲を定義する N − 1 個のサンプル キーのソート済みリストを使用するカスタム パーティショナーを除いて、標準のマップ/リデュース ソートです。特に、sample[i − 1] <= key < sample[i] が reduce i に送信されます。これにより、reduce i の出力がすべて reduce i+1 の出力よりも小さいことが保証されます。」

于 2013-06-27T17:03:29.830 に答える