2011-07-03 17 views
1

Hadoop 0.20.2のTeraSortクラスのマッパーにいくつかのコードを挿入する予定です。ただし、ソースコードを確認した後、マッパーが実装されているセグメントを見つけることはできません。 通常、マッパークラスを示すjob.setMapperClass()というメソッドがあります。しかし、TeraSortでは、setInputformat、setOutputFormatのようなものしか見ることができません。マッパーとメソッドを削減する場所を見つけることができませんか? これについて何かヒントを教えてください。おかげで、 ソースコードはhadoop用マッパー/レデューサーTeraSort

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

私はTeraSortため、このような方法を見ることができない、TeraValidateのように、私たちはのようなコードを見つけることができ、他のクラスの

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; 
} 

このようなものです。

おかげで、

答えて

3

はなぜソートはそれをMapperReducerクラスを設定する必要があるでしょうか?

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

あなたは入力からすべてを放出しているだけで、Hadoopにそれ自体のソート用のものをさせることができます。ソートは「デフォルト」で動作します。

1

Thomasの答えは正しいです。つまり、reduce関数を適用する前にシャッフルされたデータがソートされるため、マッパーとレデューサーは同一です。テラソートの特長は、カスタムパーティショナー(デフォルトのハッシュ関数ではありません)です。詳細はこちらからHadoop's implementation for Terasortをお読みください。状態:

"TeraSortは、各reduceのキー範囲を定義するN - 1個のサンプリングされたキーのソートされたリストを使用するカスタムパーティショナーを除いて、標準のmap/reduceソートです。特に、sample [ i - 1] < = key < sample [i]がiを減らすために送信されます。これにより、reduce iの出力がすべてreduce i + 1の出力より小さくなることが保証されます。

関連する問題