平行計算和MapReduce

2022-09-16 12:45:11 字數 2410 閱讀 4546

參考:

現在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應運而生。

平行計算框架Mapreduce簡介

hadoop的三個元件,先有mapreduce 分布式計算模型 後有hdfs,知道hadoop才有了yarn,因此掌握mapreduce很有必要,雖然現在都是使用流式處理框架,如storm,spark等,但是這幾種框架的思想及原理都 於mapreduce mapreduce 思想 分而治之 map ...

分布式平行計算MapReduce

1.用自己的話闡明hadoop平台上hdfs和mapreduce的功能 工作原理和工作過程。hdfs 1 第一次啟動 namenode 格式化後,建立 fsimage 和 edits 檔案。如果不是第一次啟動,直接載入編輯日誌和映象檔案到記憶體。2 客戶端對元資料進行增刪改的請求。3 namenod...

分布式平行計算MapReduce

作業要求來自 1.用自己的話闡明hadoop平台上hdfs和mapreduce的功能 工作原理和工作過程。hdfs hadoop distributed file system,hadoop分布式檔案系統 它是乙個高度容錯性的系統,適合部署在廉價的機器上。hdfs能提供高吞吐量的資料訪問,適合那些有...