1. 程式人生 > >大資料學習筆記之分散式並行處理MapReduce

大資料學習筆記之分散式並行處理MapReduce

谷歌公司最先提出了分散式並行程式設計模型MapReduce,Hadoop MapReduce是它的 開源實現,後者比前者使用門檻低很多。
MapReduce和傳統的平行計算框架的比較

傳統平行計算框架 MapReduce
叢集架構/容錯性 共享式(共享式儲存/共享記憶體) 非共享式,容錯性好
硬體/價格/擴充套件性 刀鋒伺服器、高速網、SAN、價格貴,擴充套件性差 普通PC機,便宜,擴充套件性好
程式設計/學習難度 what-how,難 what,簡單
使用場景 實時、細粒度計算、計算密集型 批處理、非實時、資料密集型

1.MapReduce模型簡介

  • MapReduce將複雜的、運行於大規模叢集上的平行計算過程高度地抽象到了兩個函式:Map和 Reduce
  • 程式設計容易,不需要掌握分散式並行程式設計細節,也可以很容易把自己的程式執行在分散式系統上,完
    成海量資料的計算
  • MapReduce採用“分而治之”策略,一個儲存在分散式檔案系統中的大規模資料集,會被切分成 許多獨立的分片(split),這些分片可以被多個Map任務並行處理
  • MapReduce設計的一個理念就是“計算向資料靠攏”,而不是“資料向計算靠攏”,因為,移動
    資料需要大量的網路傳輸開銷
  • MapReduce框架採用了Master/Slave架構,包括一個Master和若干個Slave。Master上執行 JobTracker,Slave上執行TaskTracker
  • Hadoop框架是用Java實現的,但是,MapReduce應用程式則不一定要用Java來寫
    在這裡插入圖片描述

2.MapReduce體系結構

MapReduce體系結構主要由四個部分組成,分別是:Client、JobTracker、TaskTracker以及Task,如下圖:
在這裡插入圖片描述

  • Client 使用者編寫的MapReduce程式通過Client提交到JobTracker端,使用者可通過Client提供的一些介面檢視作業執行狀態
  • JobTracker 負責資源監控和作業排程 ,JobTracker會監控所有TaskTracker與Job的健康狀況,一旦發現失敗,就將相應的任務轉移到其他節點,JobTracker 會跟蹤任務的執行進度、資源使用量等資訊,並將這些資訊告訴任務 排程器(TaskScheduler),而排程器會在資源出現空閒時,選擇合適的任務去使用這些資源
  • TaskTracker TaskTracker 會週期性地通過“心跳”將本節點上資源的使用情況和任務的執行進 度彙報JobTracker,同時接收JobTracker 傳送過來的命令並執行相應的操作(如啟動新任務、殺死任務等),TaskTracker 使用“slot”等量劃分本節點上的資源量(CPU、記憶體等)。一個Task 獲取到一個slot 後才有機會執行,而Hadoop排程器的作用就是將各個TaskTracker 上的空閒slot分配給Task使用。slot 分為Map slot 和Reduce slot 兩種,分別供 MapTask 和Reduce Task 使用
  • Task Task 分為Map Task 和Reduce Task 兩種,均由TaskTracker 啟動

2.1 工作流程

在這裡插入圖片描述
在這裡插入圖片描述

2.2MapReduce各個執行階段

在這裡插入圖片描述

  • Split(分片) HDFS 以固定大小的block 為基本單位儲存資料,而對於MapReduce 而言,其處理單位是split。split 是一個邏輯概念,它只包含一些元資料資訊,比如資料起始位置、資料長度、資料所在節點等。 split的劃分方法完全由使用者自己決定。
  • Map任務的數量 Hadoop為每個split建立一個Map任務,split 的多少決定了Map任務的數目。 大多數情況下,理想的分片大小是一個HDFS塊
  • Reduce任務的數量最優的Reduce任務個數取決於叢集中可用的reduce任務槽(slot)的數目,通常設定比reduce任務槽數目稍微小一些的Reduce任務個數(這樣可以預留 一些系統資源處理可能發生的錯誤)

Shuffle過程詳解

shuffle過程,是指對Map輸出結果進行分割槽、排序、合併等處理並交給Reduce的過程,因此Shuffle過程可以分為Map端的操作和Reduce端的操作,
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述