並行計算和MapReduce

2019-12-01

21:17:38

參考:https://www.iteye.com/blog/xuyuanshuaaa-1172511程序員

如今MapReduce/Hadoop以及相關的數據處理技術很是熱,所以我想在這裏將MapReduce的優點彙總一下,將MapReduce與傳統基於HPC集羣的並行計算模型作一個簡要比較,也算是對前一陣子所學的MapReduce知識作一個總結和梳理。 

  隨着互聯網數據量的不斷增加,對處理數據能力的要求也變得愈來愈高。當計算量超出單機的處理能力極限時,採起並行計算是一種天然而然的解決之道。在MapReduce出現以前,已經有像MPI這樣很是成熟的並行計算框架了,那麼爲何Google還須要MapReduce,MapReduce相較於傳統的並行計算框架有什麼優點,這是本文關注的問題。 

  文章之初先給出一個傳統並行計算框架與MapReduce的對比表格,而後一項項對其進行剖析。  

MapReduce和HPC集羣並行計算優劣對比 
▲ 

  在傳統的並行計算中,計算資源一般展現爲一臺邏輯上統一的計算機。對於一個由多個刀片、SAN構成的HPC集羣來講,展示給程序員的仍舊是一臺計算機,只不過這臺計算擁有爲數衆多的CPU,以及容量巨大的主存與磁盤。在物理上,計算資源與存儲資源是兩個相對分離的部分,數據從數據節點經過數據總線或者高速網絡傳輸到達計算節點。對於數據量較小的計算密集型處理,這並非問題。而對於數據密集型處理,計算節點與存儲節點之間的I/O將成爲整個系統的性能瓶頸。共享式架構形成數據集中放置,從而形成I/O傳輸瓶頸。此外,因爲集羣組件間耦合、依賴較緊密,集羣容錯性較差。 

  而實際上,當數據規模大的時候,數據會體現出必定的局部性特徵,所以將數據統一存放、統一讀出的作法並非最佳的。 MapReduce致力於解決大規模數據處理的問題,所以在設計之初就考慮了數據的局部性原理,利用局部性原理將整個問題分而治之。MapReduce集羣由普通PC機構成,爲無共享式架構。在處理以前,將數據集分佈至各個節點。處理時,每一個節點就近讀取本地存儲的數據處理(map),將處理後的數據進行合併(combine)、排序(shuffle and sort)後再分發(至reduce節點),避免了大量數據的傳輸,提升了處理效率。無共享式架構的另外一個好處是配合複製(replication)策略,集羣能夠具備良好的容錯性,一部分節點的down機對集羣的正常工做不會形成影響。 

  硬件/價格/擴展性 

  傳統的HPC集羣由高級硬件構成,十分昂貴,若想提升HPC集羣的性能,一般採起縱向擴展的方式:即換用更快的CPU、增長刀片、增長內存、擴展磁盤等。但這種擴展方式不能支撐長期的計算擴展(很容易就到頂了)且升級費用昂貴。所以相對於MapReduce集羣,HPC集羣的擴展性較差。 

  MapReduce集羣由普通PC機構成,普通PC機擁有更高的性價比,所以同等計算能力的集羣,MapReduce集羣的價格要低得多。不只如此,MapReduce集羣中的節點經過以太網進行鏈接,於是具備良好的橫向擴展性,便可以經過添加PC機節點的方式提升處理能力。Yahoo!擁有世界上最大的Hadoop集羣,包含4000多個節點(Google的 MapReduce集羣規模應該更大,但好像沒公佈過具體數字,若有網友知情,還望不吝賜教)。 

  編程/學習難度 

  傳統的並行計算模型都有着與多線程模型相似的邏輯,這種編程模型最大的問題是程序的行爲難以控制。爲了保證正確的執行結果,須要當心控制共享資源的訪問,並由此發展出了互斥量、信號量、鎖等一系列同步技術,也帶來了諸如爭搶、飢餓、死鎖等問題。程序員在使用傳統並行計算模型編程時,不只僅要考慮要作的事情(即「what to do」:使用並行模型描述須要解決的問題),還要考慮程序執行的細節(即「how to do」,程序執行中的諸多同步、通訊問題),這使得並行編程十分困難。已有的編程模型,例如MPI、OpenCL、CUDA也只是在較低的層次作了封裝,須要處理的程序執行細節依然不少。 

  MapReduce則作了更多處理:MapReduce不只包含編程模型,還提供一個運行時環境,用以執行MapReduce程序,並行程序執行的諸多細節,如分發、合併、同步、監測等功能均交由執行框架負責。使用MapReduce,程序員只須要考慮如何使用MapReduce模型描述問題(what),而無需操心程序是如何執行的(how),這使得MapReduce易學易用。 

  適用場景 

  說了這麼多MapReduce的好話,MapReduce是萬金油嗎? 

  答案是否認的,不管何時,都不該該忘記MapReduce的設計初衷:解決大規模、非實時數據處理問題。大規模決定數據有局部性特性可利用(從而能夠劃分)、能夠批處理;非實時表明響應時間能夠較長,有充分的時間執行程序。好比下面的幾個操做: 

  1. 更新搜索引擎排序(在整個web圖上執行PageRank算法) 

  2. 計算推薦(推薦結果並不須要實時更新,所以設定一個固定時間點週期性更新) 

  MapReduce的誕生有它的時代背景:隨着web的發展,尤爲是SNS和物聯網的發展,web上各類由用戶、傳感器產生數據量呈現出爆炸式的增加。數據存起來只能是死數據,惟有通過分析處理,才能獲得數據中蘊含的信息,進而從信息中總結知識。所以數據重要,處理數據的能力一樣重要。傳統的基於HPC集羣的並行計算已經沒法知足飛速增加的數據處理須要,所以基於普通PC的低成本、高性能、高可擴展性、高可靠性的MapReduce應運而生。web

相關文章
相關標籤/搜索