Hadoop,MapReduce,JOB引數
阿新 • • 發佈:2019-01-27
下面介紹MapReduce的主要的六個類,只有瞭解了這六個類的作用,才能在編寫程式中知道哪個類是要自己實現,哪些類可以呼叫預設的類,才能真正的做到遊刃有餘,關於需要自己編寫的類(使用者制定類)可以參考:
-
InputFormat類。該類的作用是將輸入的檔案和資料分割成許多小的split檔案,並將split的每個行通過LineRecorderReader解析成<Key,Value>,通過job.setInputFromatClass()函式來設定,預設的情況為類TextInputFormat,其中Key預設為字元偏移量,value是該行的值。
-
Map類。根據輸入的<Key,Value>對生成中間結果,預設的情況下使用Mapper類,該類將輸入的<Key,Value>對原封不動的作為中間按結果輸出,通過job.setMapperClass()實現。實現Map函式。
-
Combine類。實現combine函式,該類的主要功能是合併相同的key鍵,通過job.setCombinerClass()方法設定,預設為null,不合並中間結果。實現map函式
-
Partitioner類。 該該主要在Shuffle過程中按照Key值將中間結果分成R份,其中每份都有一個Reduce去負責,可以通過job.setPartitionerClass()方法進行設定,預設的使用hashPartitioner類。實現getPartition函式
-
Reducer類。 將中間結果合併,得到中間結果。通過job.setReduceCalss()方法進行設定,預設使用Reducer類,實現reduce方法。
- 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); } }