Hadoop架構介紹——MapReduce的體系結構
-分散式程式設計架構
-以資料為中心,更看重吞吐率
-分而治之(把對大規模資料集的操作,分發給一個主節點管理下的各個分節點共同完成,然後整合各個節點的中間結果得到最終的輸出)
-Map把一個任務分解成多個子任務
-Reduce將分解後的多工分別處理,並將結果彙總為最終的結果
應用舉例:清點圖書館藏書、統計單詞的出現次數、混合辣椒醬的製作等等。
結構圖:
也採用了Master-Slaver結構。
4個實體:
-Client
-JobTraker
-TaskTraker(任務節點)
-HDFS(輸入、輸出資料、配置資訊等)
基本概念:
作業(Job):在Hadoop內部,用Job來表示執行的MapReduce程式所需要用到的所有jar檔案和類的集合,這些檔案最終都被整合到一個jar檔案中,將此jar檔案提交給JobTraker,MapReduce程式就會執行
任務(Task):MapTask和ReduceTask
鍵值對(key/value pair)
Map()、Reduce()函式的輸入、輸出都是<key,value>的形式
HDFS儲存的輸入資料經過解析後,以鍵值對的形式,輸入到MapReduce()函式中進行處理,輸出一系列鍵值對作為中間結果,在Reduce階段,對擁有同樣Key值的中間資料進行合併形成最後結果。
生命週期:
1.提交作業
-在作業提交之前,需要對作業進行配置;
-程式程式碼,主要是自己編寫的MapReduce程式;
-配置輸入輸出路徑、輸出是否壓縮;
-配置完成後,通過JobClient來提交;
作業排程演算法:
FIFO排程器(預設)、公平排程器、容量排程器
2.任務分配
-TaskTracker和JobTracker之間的通訊與任務的分配是通過心跳機制完成的;
-TaskTracker會主動向JobTracker詢問是否有作業要做,如果自己可以做,那麼就會申請到作業任務,這個任務 可以使Map也可能是Reduce任務;
3.任務執行
-TaskTraker將程式碼和配置資訊到本地;
-分別為每一個Task啟動JVM執行任務
4.狀態更新
-任務在執行過程中,首先會將自己的狀態彙報給TaskTracker,然後由TaskTracker彙總告之JobTracker;
-任務進度是通過計數器來實現的;
-JobTracker是在接受到最後一個任務執行完成後,才會將作業標誌為成功。