大資料入門:MapReduce基本原理
在圍繞Hadoop形成的大資料技術生態當中,MapReduce的地位,在早期是處於核心地位的,但是伴隨著資料處理實時性需求的不斷提升,更多新的計算框架出現,MapReduce的地位受到壓制,但是作為Hadoop原始計算框架,還是需要相應程度的瞭解和掌握的。今天的大資料入門分享,我們來具體講一講MapReduce基本原理。
一、什麼是MapReduce?
在Hadoop技術生態當中,MapReduce是作為計算引擎出現的,在處理超大規模的資料集上,MapReduce效能可觀,通過分散式計算,將大規模資料計算任務分解,分佈到不同的計算節點去平行計算,從而使得低成本下的大規模資料計算成為可能。
MapReduce的原型,公認的說法,是來自Google公司2004年釋出的MapReduce論文,而後Doug Cutting根據谷歌的論文,實現了MapReduce,並將其作為Hadoop的一個元件開源。在Hadoop當中,MapReduce也是處於核心元件的地位。
二、MapReduce解決了什麼問題?
網際網路、移動網際網路的高度發達,為資料儲存和資料計算都帶來了新的挑戰。當資料的規模大到一定程度,單獨的機器已經無法負荷。那麼能夠怎麼辦呢?首先能夠想到的辦法,就是增加機器。
而要想讓一定數量的機器實現協同工作,並且工作效率要求還不低,應該怎麼去實現呢?這就是MapReduce需要解決的問題。MapReduce作為一個分散式平行計算框架,就是一個把一群機器組織起來工作的程式設計模型。
三、MapReduce是怎麼解決的?
MapReduce,其實從執行來說,就是分為大的兩個階段的,一個階段是MapTask(將大任務拆分為小任務),第二個階段是ReduceTask(小任務計算結果重組),兩個階段之間,有個Shuffle的過程。
MapTask
整個MapTask分為Read階段,Map階段,Collect階段,溢寫(spill)階段和combine階段。
Read階段:MapTask通過使用者編寫的RecordReader,從輸入InputSplit中解析出一個個key/value;
Map階段:該節點主要是將解析出的key/value交給使用者編寫map()函式處理,併產生一系列新的key/value;
Collect收集階段:在使用者編寫map()函式中,當資料處理完成後,一般會呼叫OutputCollector.collect()輸出結果。在該函式內部,它會將生成的key/value分割槽(呼叫Partitioner),並寫入一個環形記憶體緩衝區中;
Spill階段:即“溢寫”,當環形緩衝區滿後,MapReduce會將資料寫到本地磁碟上,生成一個臨時檔案。需要注意的是,將資料寫入本地磁碟之前,先要對資料進行一次本地排序,並在必要時對資料進行合併、壓縮等操作;
Shuffle
Map方法之後,Reduce方法之前的資料處理過程稱之為Shuffle。shuffle流程如下:
- MapTask收集map()方法輸出的kv對,放到環形緩衝區中;
- 從環形緩衝區不斷溢位到本地磁碟檔案,可能會溢位多個檔案;
- 多個溢位檔案會被合併成大的溢位檔案;
- 在溢位過程及合併的過程中,都要呼叫Partitioner進行分割槽和針對key進行排序;
- ReduceTask根據自己的分割槽號,去各個MapTask機器上取相應的結果分割槽資料;
- ReduceTask將取到的來自同一個分割槽不同MapTask的結果檔案進行歸併排序;
- 合併成大檔案後,shuffle過程也就結束了,進入reduce方法。
ReduceTask
整個ReduceTask分為Copy階段,Merge階段,Sort階段(Merge和Sort可以合併為一個),Reduce階段。
Copy階段:ReduceTask從各個MapTask上遠端拷貝一片資料,並針對某一片資料,如果其大小超過一定閾值,則寫到磁碟上,否則直接放到記憶體中;
Merge階段:在遠端拷貝資料的同時,ReduceTask啟動了兩個後臺執行緒對記憶體和磁碟上的檔案進行合併,以防止記憶體使用過多或磁碟上檔案過多;
Sort階段:按照MapReduce語義,使用者編寫reduce()函式輸入資料是按key進行聚集的一組資料。為了將key相同的資料聚在一起,Hadoop採用了基於排序的策略。由於各個MapTask已經實現對自己的處理結果進行了區域性排序,因此,ReduceTask只需對所有資料進行一次歸併排序即可;
Reduce階段:reduce()函式將計算結果寫到HDFS上。
關於大資料入門,MapReduce基本原理,以上就為大家做了一個簡單的介紹了。在Hadoop生態當中,MapReduce雖然地位日益尷尬,但是其MapReduce思想,在後來的框架(比如Spark)當中,繼續得到了繼承。
相關文章
- Hadoop框架:MapReduce基本原理和入門案例Hadoop框架
- 大資料入門大資料
- 帶你入坑大資料(三) --- MapReduce介紹大資料
- 機器學習——大資料與MapReduce機器學習大資料
- 大話 資料入門
- ODPS MapReduce入門
- 大資料入門001大資料
- 入門大資料---大資料調優彙總大資料
- 大資料學習入門看什麼書?大資料新手怎麼入門?大資料
- 大資料計算的基石——MapReduce大資料
- [大資料之Spark]——快速入門大資料Spark
- 如何大資料開發入門大資料
- Hadoop 專欄 - MapReduce 入門Hadoop
- MapReduce入門及核心流程案例
- 大資料系列4:Yarn以及MapReduce 2大資料Yarn
- 【大資料】MapReduce開發小實戰大資料
- 大資料學習筆記(十七)-MapReduce大資料筆記
- 大資料怎樣入門學習?大資料
- 大資料基礎----Python入門大資料Python
- Hadoop-MapReduce-TeraSort-大資料排序例子Hadoop大資料排序
- 純乾貨分享 —— 大資料入門指南大資料
- Hadoop入門和大資料應用Hadoop大資料
- MapReduce(一):入門級程式wordcount及其分析
- 大資料小白系列 —— MapReduce流程的深入說明大資料
- 入門大資料,可以先自學哪些內容?大資料
- 大資料入門指南(GitHub開源專案)大資料Github
- 快速入門大資料訊息中介軟體大資料
- 大資料架構師從入門到精通大資料架構
- 大資料學習:怎樣進行大資料的入門級學習?大資料
- 大資料學習:零基礎大資料入門該看哪些書?大資料
- 大資料技術之Hadoop(入門)第1章 大資料概論大資料Hadoop
- MapReduce之----往hbase資料庫寫入資料時, 出現資料異常資料庫
- 大資料 - MapReduce:從原理到實戰的全面指南大資料
- 大資料入門到精通,想入行大資料需要學習這些知識大資料
- NLP入門資料
- 大資料學習入門難,給初學者支招大資料
- 大資料入門:Hadoop Yarn元件基礎解析大資料HadoopYarn元件
- 大資料【學習必看】入門+提升+專案=高薪大資料高薪