InputFormat和OutPutFormat


InputFormat主要用於對輸入數據的描述。提供了兩個功能。

1,數據的切片。InputFormat按照某個策略,將輸入數據切分為若干個split,Map任務的個數和split的個數相對應。

Inputformat中對應getSplits的方法,完成數據切分的功能。歸於inputsplit有兩個特點。

A,邏輯分片。Inputsplit只是在邏輯上對輸入的數據進行分片,並不會在磁盤上將其切分,inputspli只是記錄了分片的元數據信息,比如說起始位置,長度和節點的列表等。

B,可序列化。Inputsplit序列化以方便進程間通信。作業提交的時候,inputsplit會序列化到文件中,在map任務啟動前,初始化的時候可以直接讀取文件。

inputformat的FileInputFormat中inputsplit的切分過程。

FileInputFormat的切分主要包括兩個方面,一是文件的切分。二是host的選擇。

文件的切分,主要是要確認每一個切片的大小splitSize,切片的數量為文件的大小/splitSize。hadoop中切片的大小是如下確認的:

splitSize=max{minSize,min{maxSize,BlockSize}};

其中minSize和maxSize可以進行配置,BlockSize是hdfs中每個block的大小。

host選擇算法直接印象運行過程中任務的本地性。hadoop對本地性划分為3個等級,node,rack,datacenter。host在選擇的時候是選擇包含該inputsplit數據總量最大的前幾個節點

2,位Mapper提供輸入數據。通過某個給定的split,能夠將其解析成一個個的key/value對。inputformat中另外一個方法是getRecordReader;通過傳入inputsplit,返回recordReader對象。Map任務執行過程中,就是通過不斷的調用RecordReader的方法迭代獲取key/value.

順便說一下outputformat。

outputformat中主要包括兩個方法1,getRecoreWrite。2,checkOutputSpecs。

checkOutputSpecs主要檢查輸出目錄是否合法,一般在作業提交之前會被調用,如果目錄已經存在就會拋出異常,放置文件被覆蓋。

fileOutPutFormat的實現中為了放置推測式的任務產生沖突,會為每個task任務數據創建side-effect,將產生的數據臨時寫入該文件,等task完成后在移動到最終輸出任務。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM