MapReduce學習筆記(3) ——輸入格式
阿新 • • 發佈:2018-12-15
來源:《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。
- KeyValueTextInputFormat
- NLineInputFormat NLineInputFormat可以設定每個mapper收到的輸入行數,屬性為mapred.line.input.format.linespermap。
- StreamXmlRecordReader
6. 二進位制輸入
- SequenceFileInputFormat
若順序檔案資料作為MapReduce的輸入,使用SequenceFileInputFormat。鍵、值由順序檔案確定。
- SuquenceFileAsTextInputFormat SequenceFileInputFormat的變體,將順序檔案的鍵、值轉換為Text物件。
- SuquenceFileAsBinaryInputFormat SequenceFileInputFormat的變體,將順序檔案的鍵、值轉換為二進位制物件。
7. 多種輸入
MultipleInputs允許為每條輸入路徑設定InputFormat和Mapper。