大資料小白系列——MR(3)

資料工程師金牛發表於2018-12-31

上一期我們稍微深入瞭解一下MR流程,尤其是比較重要但相對較少被提及的Shuffling過程,本期我們來看看MR的指導思想和侷限性。

 

01

MR中的兩個思想

太陽底下沒有新鮮事,整個MR框架相對簡單,不過有兩個思想我覺得可以介紹一下,這兩個思想不玄妙,但很實用,確實能解決大資料領域的不少問題。

在這裡我還是要推薦下我自己建的大資料學習交流qq裙: 957205962, 裙 裡都是學大資料開發的,如果你正在學習大資料 ,小編歡迎你加入,大家都是軟體開發黨,不定期分享乾貨(只有大資料開發相關的),包括我自己整理的一份2018最新的大資料進階資料和高階開發教程,歡迎進階中和進想深入大資料的小夥伴
 

Divide And Conquer(分治)

所謂的分治思想,就是“分開目標、各個擊破”,其流程是:將整個問題劃分為多個子問題->求解各子問題->合併子問題的解以形成原始問題的解,正如MR中的Splitting、Mapping和Reducing。

Data Locality(資料本地性)

即所謂的將計算移近資料,而不是將資料移近計算,“Move computation to data, instead of moving data to computation”。

資料儲存在HDFS中時,它被劃分為塊並儲存在DataNode上。當進行MR作業時,各個Mappers將處理這些塊。如果Mapper不能從它執行的節點磁碟上獲取資料,而需要通過網路從其他DataNode獲取。這將是非常糟糕的情況,因為網路的IO甚至比磁碟IO的代價還要大得多。因此,將程式碼分發到更接近資料的節點上進行運算是更廉價高效的方法。

 

 

02

MR的侷限性

處理速度較慢

MR的執行速度慢。一個普通的作業一般在分鐘級別完成,複雜的作業甚至花費一小時或者更多,所以它適合對時間不那麼敏感的OLTP。

MR的慢主要是由於磁碟IO和網路IO,大量的中間結果需要寫到磁碟上(mapping),並通過網路進行傳輸(shuffling),這耗去了大量的時間。

不適用於某些資料/演算法

要對資料進行splitting並分別進行各自獨立的處理,需要資料之間存在較低的相關性,對於一些複雜的、彼此之間存在各種依賴的資料,MR處理起來就比較困難。

或者,對於需要進行多次迭代的演算法,後一步驟的輸入為前一個的輸出(例如常見的k-means)。在這種情況下如果使用MR,每個作業的輸出結果都要進行磁碟IO,導致效能無法忍受。

有一定的使用門檻

雖然MR框架替我們隱藏了大部分的複雜性,我們仍然需要手工編寫程式碼(即map方法和reduce方法),掌握程式語言(Java、Python等)成為了使用MR的門檻。

與之形成對比的是關係型資料庫的SQL,由於其易用性,大資料領域也越來越多地出現相容SQL語法的計算引擎,大有一統江湖之勢。

 

好了,本期就先到這兒,MR部分就結束了,下一期開始講講YARN。Cheers!

在這裡我還是要推薦下我自己建的大資料學習交流qq裙: 957205962, 裙 裡都是學大資料開發的,如果你正在學習大資料 ,小編歡迎你加入,大家都是軟體開發黨,不定期分享乾貨(只有大資料開發相關的),包括我自己整理的一份2018最新的大資料進階資料和高階開發教程,歡迎進階中和進想深入大資料的小夥伴

相關文章