大資料處理——Hadoop解析(二):MapReduce

來源:互聯網
上載者:User

大HTTP://www.aliyun.com/zixun/aggregation/14345.html">資料處理模型MapReduce

(接《大資料處理——Hadoop解析(一)》)

大資料時代生產的資料最終是需要進行計算的,存儲的目的也就是為了做大資料分析。 通過計算、分析、挖掘資料背後的東西,才是大資料的意義所在。 Hadoop不僅提供了資料存儲的分散式檔案系統,更重要的是提供了分散式程式設計模型和分散式運算系統,通過該程式設計模型和分散式運算架構可以解決大資料時代所面臨的資料處理問題。 該分散式運算模型、架構就是大名鼎鼎的Mapreduce。 Mapreduce同樣來自于Google,2004年Google發表了著名的Mapreduce論文,然後被Hadoop的前身專案採納。 Mapreduce分散式運算模型應用於Google的資料搜索、資料採礦業務中,因此,目前很多互聯網企業都採用mapreduce的思路進行大資料處理。

Mapreduce計算模型將資料的計算過程分成兩個階段:一個階段是Map,另一個是reduce,並且,這兩個階段可以進行串聯組合。 因此,採用Mapreduce程式設計模型可以將一個演算法分解成Map函數和Reduce函數。 Map函數對輸入資料進行分散式平行作業;reduce函數對map函數的結果進行合併作業,並且輸出結果資料。 Mapreduce的運行模型如下圖所示:

Mapreduce是一種分散式程式設計模型,為了支援這種程式設計模型,Hadoop專案實現了計算任務的分發、調度、運行和容錯機制。 Mapreduce的運行框架如下圖所示:

在分散式運算模型中,主要有兩個角色,第一個角色是Job Tracker;另一個角色是Task Tracker。 Job Tracker的主要任務是負責協調Mapreduce作業的執行,具體是任務的調度、分發。 Job Tracker是Mapreduce計算架構中的主控節點。 Task Tracker用來執行Job Tracker分配的任務,具體包括Map任務和Reduce任務。 因此,Task Tracker可以被分成Map Task Tracker和Reduce Task Tracker。 Job Tracker在整個框架中的地位很重要,並且時刻保持和Task Tracker之間的聯繫,一旦發現Task Tracker出現了故障,那麼Job Tracker會在其他節點上對fail的任務進行重新調度。 另外,考慮到計算任務需要從資料庫或者檔案系統中獲取資料,因此,在Job Tracker在調度一個任務的時候,需要考慮計算節點和資料來源的距離。 通常可以將計算任務直接在存儲節點上調度,這樣可以避免網路上的資料傳輸,降低IO資料傳輸引入的延遲。

十幾年前,存儲發展到一定規模的時候,提出了存儲和計算的模型,從而使得存儲技術獨立發展,形成SAN和NAS這樣的大型存儲系統。 在大資料計算的時代,存儲和計算的無情分離也會帶來負面影響,導致計算性能下降,因此,計算和存儲的一體化對mapreduce框架下的大資料分析顯得很有價值。 其實,是否分離不是重點,關鍵在於系統結構需要滿足應用需求。 SAN、NAS這樣的存儲網路往往需要通過高速互連技術(FC/IB/10Gb乙太網)與計算Server相連,這樣可以降低IO延遲。 在大資料環境下,為了降低成本,這種高速互連未必是最佳選擇。 因此,在以成本為導向的分散式架構中,計算和存儲一體化將是一個不錯的選擇。

下面來簡單描述一下在mapreduce架構下如何進行分散式運算:

1)當一個Client需要進行計算處理時,需要向Job Tracker提交一個計算作業。 並且將作業以檔的形式存放在HDFS中。

2)Job Tracker是計算資源的調度器,根據一定的策略首先將Client提交的Map任務調度到Task Tracker上。

3)Map任務會在多個Task Tracker上併發執行。 計算的中間結果會以檔的形式存儲到HDFS上。

4)當Map任務都執行完成之後,Job Tracker再分配Reduce任務到task tracker伺服器上。

5)當所有的reduce任務全部執行完成之後,計算結果會輸出到Hadoop檔案系統中。

從這個過程可以看出,Job Tracker類似于CPU資源調度器; Task Tracker是CPU資源;資料的輸入輸出都基於Hadoop檔案系統。

從這個架構可以看出,整個系統的計算節點具有很強的可擴充性,其唯一的潛在瓶頸點在於Job Tracker。 並且單一的Job Tracker也會成為一個單點故障點。 和分散式檔案系統類似,Job Tracker的地位和NameNode是一樣的,一旦Job Tracker發生故障,那麼整個計算系統將無法正常運行。 因此,採用這種架構的分散式運算系統設計重點在於Job Tracker。 首先需要保證Job Tracker具有很強的交易處理能力;其次需要保證Job Tracker具有很強的高可用性。

上述的分散式運算系統只是一種計算工具,要想真正實現分散式資料處理,在程式設計模型上同樣需要採用Mapreduce的思路,特別在演算法設計上需要採用Mapreduce的模型。 所有的演算法需要分解成Map和Reduce的兩類方法,並且這些方法可以併發執行。 在資料採礦領域有一些mapreduce的開源演算法資源,例如mahout專案就是一個很有代表性的開源資源庫。

本文出自 「存儲之道」 博客,請務必保留此出處HTTP://alanwu.blog.51cto.com/3652632/1418021

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.