Hadoop基礎(2)

1.在Job初始化時,設定input format,output format,key和value。

2.將HDFS中的block劃分成split分給map(在hdfs.xml中dfs.block.size設置block大小)。

3.map通過input format讀取(key, value)並處理。處理後將生成數據放入buffer(buffer大小可設定)。

buffer結構:除了key和value之外,還包括meta。一個meta包括了index,key length,value length,partition number。index表示meta所對應的(key, value)的索引座標,partition number表示對應(key, value)的partition號。

4.當buffer放滿時,將buffer放入sort and spill中進行排序,排序時以partition爲主鍵,key爲副鍵。

(partitions可由用戶定義,數量由reduce個數確定。例如:terasort設定的partitions確保了:partition0的所有key一定大於partition1。這樣就保證了,sort and spill之後在整個map output文件中key是有序的。grep設定的partitions確保了:partition0的所有key(也就是匹配到的詞)都相同,這樣,sort and spill之後partition中key的個數就是匹配到詞的個數。)

5.排序結束後,生成多個(有可能只有一個)map output文件和對應的index文件(標記着mapout的partition的索引,也就是partition0,partition1...partitionN在mapout文件的起始位置),將多個(如果只有1個就不需要merge)mapout和對應的index文件merge成兩個文件,最後在一個slave上只有一個mapout和對應的一個index。

6.Reduce根據index文件通過shuffle,fetch對應partition號的數據(也就是reduce0 fetch partition0)。

(fetch過程在集羣中是通過網絡完成的,如果是pesudo模式shuffle會直接讀取本地文件,也就是繞過了真正的shuffle)。

7.多個Reduce處理後進行merge,直到只剩下一個文件爲止,通過output format輸出結果。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章