數據輸入輸出格式和自定義數據輸入輸出格式
數據輸入格式(InputFormat) 用于描述MapReduce作業(yè)的數據輸入規(guī)范。MapReduce框架依靠數據輸入格式完成輸入規(guī)范檢查(比如輸入文件目錄的檢查)、對數據文件進行輸入分塊(也叫分片,InputSplit),以及提供從輸入分塊(分片)中將數據記錄逐一讀出,并轉化為Map過程的輸入鍵值對等功能
Hadoop提供了豐富的內置數據輸入格式。最常用的數據輸入格式包括:TextInputFormat和KeyValueInputFormat
TextInputFormat是系統(tǒng)默認的數據輸入格式,可以將文本文件分塊并逐行讀入以便Map節(jié)點進行處理。讀入一行時,所產生的主鍵Key就是當前行在整個文本文件中的字節(jié)偏移位置,而value就是該行的內容,它是系統(tǒng)默認的輸入格式,當用戶程序不設置任何數據輸入格式時,系統(tǒng)自動使用這個數據輸入格式。
比如如下文件內容
hello tanggao
hello hadoop
第一行的偏移量為0
第二行偏移量為13
KeyValueTextInputFormat是另一個常用的數據輸入格式,可將一個按照格式逐行存放的文本文件逐行讀出,并自動解析生成相應的key和value
比如
姓名?? ?湯高
年齡?? ?20
則解析出來的
第一行鍵Key為姓名? 值value為湯高
第二行鍵key為年齡 值value為20
注意和TextInputFormat不同,TextInputFormat是偏移量做鍵,整行內容做值
對于一個數據輸入格式,都需要一個對應的RecordReader。RecordReader。主要用于將一個文件中的數據記錄分拆成具體的鍵值對,傳送給Map過程作為鍵值對輸入參數。每一個數據輸入格式都有一個默認的RecordReader。TextInputFormat的默認RecordReader是LineRecordReader,而KeyValueTextInputFormat的默認RecordReader是KeyValueLineRecordReader
當然肯定還有很多數據輸入格式和對應的默認RecordReader 這里就不介紹了,有需要的可以去官網看看
數據輸出格式(OutputFormat)用于描述MapReduce作業(yè)的數據輸出規(guī)范。MapReduce框架依靠數據輸出格式完成輸出規(guī)范檢查(蔽日檢查輸出目錄是否存在),以及提供作業(yè)結果數據輸出等功能
Hadoop提供了豐富的內置數據輸出格式。最常用的數據輸出格式是TextOutputFormat,也是系統(tǒng)默認的數據輸出格式,可以將計算結果以 key+\t+value的形式逐行輸出到文本文件中。
與數據輸入格式中的RecordReader類似,數據輸出格式也提供一個對應的RecordWriter,以便系統(tǒng)明確輸出結果寫入到文件中的具體格式。
TextOutputFormat的默認RecordWriter是LineRecordWriter,其實際操作是將結果數據以key+\t+value的形式輸出到文本文件中。
當然同樣肯定還有很多數據輸出格式和對應的默認RecordWriter
對于自定義數據輸入格式 可以參考已有的數據輸入格式,繼承自它即可,只要重寫GetRecordReader方法得到一個自己寫的RecordReader即可
自定義數據輸入輸出:
輸入:寫自己的inputFormat:繼承InputFormat或者其子類,重寫GetRecordReader獲得默認的RecordReader即可。如果對默認的不滿意,可以寫自己的RecordReader:繼承RecordReader即可
輸出:和上面類似。只是繼承的是InputFormat,也是重寫getRecordWriter