1. 程式人生 > >MapReduce學習筆記(3) ——輸入格式

MapReduce學習筆記(3) ——輸入格式

來源:《Hadoop權威指南(第2版)》
單純摘抄

1. 幾個概念

輸入分片:單個map處理的輸入塊。 記錄:每個輸入分片劃分為若干個記錄,每條記錄就是一個鍵/值對,map一個接一個地處理每條記錄。  

2. 輸入分片

輸入分片在JAVA中表現為InputSplit介面。 InputSplit包含一個以位元組為單位的長度和一組儲存位置(主機名)。其中,長度用於排序分片,以便優先處理最大的分片,從而最小化作業執行時間。儲存位置供MapReduce使用,以便將Map任務儘量放在分片資料附近。  

3. FileInputFormat類

FileInputFormat類提供兩個功能: 1)設定作業的檔案路徑 2)實現作業檔案的分片

  • FileInputFormat只分割超過HDFS塊大小的檔案。
  • 分片大小由一個檔案分片最小的有效位元組數、一個檔案分片最大的有效位元組數以及HDFS塊的大小決定: max(minimumSize, min(maximumSize,blockSize))  

4. CombineFileInputFormat類

CombineFileInputFormat針對小檔案而設計,將多個檔案打包到一個分片中以便每個Mapper可以處理更多的資料,從而減少執行大量短時mapper所涉及的任務管理和啟動開銷。  

5. 文字輸入

  • TextInputFormat TextInputFormat是預設的InputFormat。
    每條記錄是一行輸入。 鍵是LongWritable型別,儲存該行在整個檔案中的位元組偏移量。 值是Text型別,是記錄這一行的內容,不包括任何行終止符(換行符和回車符)。
  • KeyValueTextInputFormat
  • NLineInputFormat NLineInputFormat可以設定每個mapper收到的輸入行數,屬性為mapred.line.input.format.linespermap。
  • StreamXmlRecordReader  

6. 二進位制輸入

  • SequenceFileInputFormat 若順序檔案資料作為MapReduce的輸入,使用SequenceFileInputFormat。鍵、值由順序檔案確定。
  • SuquenceFileAsTextInputFormat SequenceFileInputFormat的變體,將順序檔案的鍵、值轉換為Text物件。
  • SuquenceFileAsBinaryInputFormat SequenceFileInputFormat的變體,將順序檔案的鍵、值轉換為二進位制物件。

7. 多種輸入

MultipleInputs允許為每條輸入路徑設定InputFormat和Mapper。