1. 程式人生 > >Hadoop,MapReduce,JOB引數

Hadoop,MapReduce,JOB引數

下面介紹MapReduce的主要的六個類,只有瞭解了這六個類的作用,才能在編寫程式中知道哪個類是要自己實現,哪些類可以呼叫預設的類,才能真正的做到遊刃有餘,關於需要自己編寫的類(使用者制定類)可以參考:

  1.  InputFormat類。該類的作用是將輸入的檔案和資料分割成許多小的split檔案,並將split的每個行通過LineRecorderReader解析成<Key,Value>,通過job.setInputFromatClass()函式來設定,預設的情況為類TextInputFormat,其中Key預設為字元偏移量,value是該行的值。

  2. Map類。根據輸入的<Key,Value>對生成中間結果,預設的情況下使用Mapper類,該類將輸入的<Key,Value>對原封不動的作為中間按結果輸出,通過job.setMapperClass()實現。實現Map函式。

  3. Combine類。實現combine函式,該類的主要功能是合併相同的key鍵,通過job.setCombinerClass()方法設定,預設為null,不合並中間結果。實現map函式

  4. Partitioner類。 該該主要在Shuffle過程中按照Key值將中間結果分成R份,其中每份都有一個Reduce去負責,可以通過job.setPartitionerClass()方法進行設定,預設的使用hashPartitioner類。實現getPartition函式

  5. Reducer類。 將中間結果合併,得到中間結果。通過job.setReduceCalss()方法進行設定,預設使用Reducer類,實現reduce方法。

  6. OutPutFormat類,該類負責輸出結果的格式。可以通過job.setOutputFormatClass()方法進行設定。預設使用TextOUtputFormat類,得到<Key,value>對。

note:hadoop主要是上面的六個類進行mapreduce操作,使用預設的類,處理的資料和文字的能力很有限,具體的專案中,使用者通過改寫這六個類(過載六個類),完成專案的需求。說實話,我剛開始學的時候,我懷疑過Mapreudce處理資料功能,隨著學習深入,真的很欽佩mapreduce的設計,基本就二個函式,通過過載,可以完成所有你想完成的工作。

public  static void main(String[] args)throws IOException {
        Configuration conf = new Configuration();
        Job job = new Job(conf);
        job.setInputFormatClass(TextInputFormat.class);
        job.setMapperClass(Mapper.class);
        job.setCombinerClass(null);
        job.setPartitionerClass(HashPartitioner.class);
        job.setReducerClass(Reducer.class);
        job.setOutputFormatClass(TextOutFormat.class);
    }
}