當前位置:編程學習大全網 - 源碼下載 - MapReduce工作流程最詳細解釋

MapReduce工作流程最詳細解釋

Mapreduce簡介

Hadoop MapReduce 源於Google發表的 MapReduce論文。Hadoop MapReduce 其實就是Google MapReduce的壹個克隆版本。Hadoop 2.0即第二代Hadoop系統,其框架最核心的設計是HDFS、MapReduce和YARN。其中,HDFS為海量數據提供存儲,MapReduce用於分布式計算,YARN用於進行資源管理。

其實,壹次mapreduce過程就包括上圖的6個步驟,input、splitting、mapping、shuffling、redecing、final redult。

文件要存儲在HDFS中,每個文件被切分成多個壹定大小的塊也就是Block,(Hadoop1.0默認為64M,Hadoop2.0默認為128M),並且默認3個備份存儲在多個的節點中。

MR通過Inputformat將數據文件從HDFS中讀入取,讀取完後會對數據進行split切片,切片的數量根據Block的大小所決定,然後每壹個split的個數又決定map的個數,即壹個split會分配壹個maptask並行實例處理。

如何確定切分的文件大小?

數據進入到map函數中,然後開始按照壹定的規則切分。其實這就是我們自定義的計算邏輯,我們編寫mr程序的map函數的邏輯壹般就在這個階段執行。企業應用為了追求開發效率,壹般都使用hive sql代替繁瑣的mr程序了,這裏附上壹個經典的wordcount的map函數重溫壹下吧。

Shuffle是我們不需要編寫的模塊,但卻是十分關鍵的模塊。

在map中,每個 map 函數會輸出壹組 key/value對, Shuffle 階段需要從所有 map主機上把相同的 key 的 key value對組合在壹起,(也就是這裏省去的Combiner階段)組合後傳給 reduce主機, 作為輸入進入 reduce函數裏。

Partitioner組件 負責計算哪些 key 應當被放到同壹個 reduce 裏

HashPartitioner類,它會把 key 放進壹個 hash函數裏,然後得到結果。如果兩個 key 的哈希值 壹樣,他們的 key/value對 就被放到同壹個 reduce 函數裏。我們也把分配到同壹個 reduce函數裏的 key /value對 叫做壹個reduce partition.

我們看到 hash 函數最終產生多少不同的結果, 這個 Hadoop job 就會有多少個 reduce partition/reduce 函數,這些 reduce函數最終被JobTracker 分配到負責 reduce 的主機上,進行處理。

Map方法之後,數據首先進入到分區方法,把數據標記好分區,然後把數據發送到環形緩沖區;環形緩沖區默認大小100m,環形緩沖區達到80%時,進行溢寫; 溢寫前對數據進行排序 ,排序按照對key的索引進行字典順序排序,排序的手段快排;溢寫產生大量溢寫文件,需要 對溢寫文件進行歸並排序 ;對溢寫的文件也可以進行Combiner操作,前提是匯總操作,求平均值不行。最後將文件按照分區存儲到磁盤,等待Reduce端拉取。每個Reduce拉取Map端對應分區的數據。拉取數據後先存儲到內存中,內存不夠了,再存儲到磁盤。拉取完所有數據後, 采用歸並排序將內存和磁盤中的數據都進行排序 。在進入Reduce方法前,可以對數據進行分組操作。值得註意的是, 整個shuffle操作是有3次排序的。

reduce() 函數以 key 及對應的 value 列表作為輸入,按照用戶自己的程序邏輯,經合並 key 相同的 value 值後,產 生另外壹系列 key/value 對作為最終輸出寫入 HDFS。

  • 上一篇:小米源代碼同步
  • 下一篇:全球首個交易所內自助空投系統——以飛空投系統正式啟用!
  • copyright 2024編程學習大全網