並行計算和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應運而生。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM