2011-07-03 34 views
1

我打算在Hadoop 0.20.2中插入一些代碼到TeraSort類的映射器中。但是,在查看源代碼之後,我找不到映射器實現的片段。 通常,我們將看到一個名爲job.setMapperClass()的方法,它指示映射器類。但是,對於TeraSort,我只能看到像setInputformat,setOutputFormat這樣的東西。我無法找到調用mapper和reduce方法的地方? 任何人都可以提供一些關於此的提示嗎?謝謝, 的源代碼是這樣的,爲什麼不爲hadoop映射器/ reducer TeraSort

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這樣的方法。

感謝,

回答

3

爲什麼要排序需要設置MapperReducer類呢?

默認值是標準Mapper(原身份映射程序)和標準Reducer。 這些是您通常繼承的類。

基本上可以這樣說,您只需輸入所有內容並讓Hadoop自行分類即可。所以排序是通過「默認」來工作的。

1

托馬斯答案是正確的,即映射器和縮減器是身份,因爲在應用您的縮減功能之前對已整理的數據進行排序。 terasort的特別之處在於它的自定義分區程序(它不是默認的哈希函數)。你應該從這裏閱讀更多關於Hadoop's implementation for Terasort。它聲明

「TeraSort是一種標準的映射/縮減排序,除了使用定義每個縮減的鍵範圍的N-1個採樣鍵的排序列表的自定義分區,特別是所有鍵,例如[ i - 1] < = key < sample [i]被髮送以減少i,這保證了reduce i的輸出都小於reduce i + 1的輸出。

相關問題