google發表了mapreduce計算範型及其架構的論文。mapreduce和并行資料庫系統(mpp)各有優劣并且兩者有一定的互補和學習。與傳統mpp架構相比,mapreduce更适合非結構化資料的etl處理類操作,并且可擴充性和容錯性占優,但是單機處理效率較低。
dag計算模型是mapreduce計算機制的一種擴充。mapreduce對于子任務之間複雜的互動和依賴關系缺乏表達能力,dag計算模型可以表達複雜的并發任務之間的依賴關系。
spark本質上是dag批處理系統,其最能發揮特長的領域是疊代式機器學習。
mapreduce計算任務的輸入是key/value資料對,輸出也以key/value資料對方式表示。開發者要根據業務邏輯實作map和reduce兩個接口函數内的具體操作内容,即可完成大規模資料的并行批處理任務。
執行個體一:單詞統計
執行個體二: 連結清單反轉
執行個體三: 頁面點選統計

處理流程:
mapreduce架構将應用的輸入資料切分成m個子產品,典型的資料塊大小為64mb,然後可以啟動位于叢集中不同機器上若幹程式。
全局唯一的主要master以及若幹個worker,master負責為worker配置設定具體的map任務或reduce任務并做一些全局管理。
map任務的worker讀取對應的資料塊内容,從資料塊中解析一個個key/value記錄資料并将其傳給使用者自定義的map函數,map函數輸出的中間結果key/value資料在記憶體中緩存
緩存的map函數産生的中間結果周期性寫入磁盤,每個map函數中間結果在寫入磁盤前被分割函數切割成r份,r是reduce個數。一般用key對r進行哈希取模。map函數完成對應資料塊處理後将r個臨時檔案位置通知master,master再轉交給reduce任務的worker
reduce任務worker接到通知時,通過rpc遠端調用将map産生的m份資料檔案pull到本地。(隻有所有map函數完成,reduce才能執行)。reduce任務根據中間資料的key對記錄進行排序,相同key的記錄聚合在一起
reduce任務worker周遊有序資料,将同一個key及其對應的多個value傳遞給使用者定義的reduce函數,reduce函數執行業務邏輯後将結果追加到reduce對應的結果檔案末尾
所有map、reduce任務完成,master喚醒使用者應用程式
為了優化執行效率,mapreduce計算架構在map階段還可以執行combiner操作。
hadoop的mapreduce運作機制基本與google的類似。
不同的是,hadoop采用https協定來進行資料傳輸,并采用歸并排序對中間結果進行排序。
google的mapreduce架構支援細粒度的容錯機制。master周期性ping各個worker,如果worker沒有響應,則認為其已經發生故障。
如果master故障則單點失效,重新送出任務。
無高層抽象資料操作語言
資料無schema及索引
單節點效率低下
任務流描述方法單一
優勢:
資料吞吐量高
支援海量資料處理的大規模并行處理
細粒度容錯
但是不适合對時效性高的應用場景,比如互動查詢或流處理,也不适合疊代計算類的機器學習及資料挖掘類應用。
由于:
啟動時間長
多處讀寫磁盤及網絡傳輸
有向無環圖的簡稱。在大資料處理領域,dag計算模型是将計算任務在内部分解成若幹子任務,這些子任務之間由邏輯關系或運作先後順序等因素被建構成有向無環圖結構。
最上層是應用表達層,通過一定手段将計算任務分解成若幹子任務形成的dag結構
最下層是實體機叢集,由大量實體機器搭建的分布式計算環境
中間層是dag執行引擎層,将上層以特殊方式表達的dag計算任務通過轉換和映射,将其部署到下層的實體機叢集中運作
微軟dag計算系統,dryad在實作時以共享記憶體、tcp連接配接以及臨時檔案的方式進行資料傳輸
job manager負責将邏輯形式存在的dag描述映射到實體機。ns負責維護叢集中目前可以的機器資源。daemon守護程序作為jm在計算節點上的代理,具體負責子任務的執行和監控。
flumejava建構了java庫,本質上是在mapreduce基礎上的dag計算系統,圖中每個節點可以看作單個mapreduce子任務。
tez使用map任務或者reduce任務作為dag的圖節點,圖節點的有向邊是資料傳輸通道。tez消除map階段中間檔案輸出到磁盤過程以及引入reduce-reduce結構改進措施提升執行效率