1、Hadoop系統架構圖架構
Hadoop1.0與hadoop2.0架構對比圖框架
YARN架構:分佈式
ResourceManager函數
NodeManageroop
ApplicationMaster設計
步驟1 用戶向YARN 中提交應用程序, 其中包括ApplicationMaster 程序、啓動ApplicationMaster 的命令、用戶程序等。blog
步驟2 ResourceManager 爲該應用程序分配第一個Container, 並與對應的NodeManager 通訊,要求它在這個Container 中啓動應用程序的ApplicationMaster。排序
步驟3 ApplicationMaster 首先向ResourceManager 註冊, 這樣用戶能夠直接經過ResourceManage 查看應用程序的運行狀態,而後它將爲各個任務申請資源,並監控它的運行狀態,直到運行結束,即重複步驟4~7。進程
步驟4 ApplicationMaster 採用輪詢的方式經過RPC 協議向ResourceManager 申請和領取資源。hadoop
步驟5 一旦ApplicationMaster 申請到資源後,便與對應的NodeManager 通訊,要求它啓動任務。
步驟6 NodeManager 爲任務設置好運行環境(包括環境變量、JAR 包、二進制程序
等)後,將任務啓動命令寫到一個腳本中,並經過運行該腳本啓動任務。
步驟7 各個任務經過某個RPC 協議向ApplicationMaster 彙報本身的狀態和進度,以讓ApplicationMaster 隨時掌握各個任務的運行狀態,從而能夠在任務失敗時從新啓動任務。在應用程序運行過程當中,用戶可隨時經過RPC 向ApplicationMaster 查詢應用程序的當
前運行狀態。
步驟8 應用程序運行完成後,ApplicationMaster 向ResourceManager 註銷並關閉本身。
運行在YARN上帶來的好處 :
利用共享存儲在兩個NN間同步edits信息,如NFS等中高端存儲設備內部的各類RAID以及冗餘硬件
DataNode同時向兩個NN彙報塊信息,讓Standby NN保持集羣最新狀態
用FailoverController watchdog進程監視和控制NN進程,防止因 NN FullGC掛起沒法發送heart beat
防止腦裂(brain-split):主備切換時因爲切換不完全等緣由致使Slave誤覺得出現兩個active master,一般採用Fencing機制:
-共享存儲fencing,確保只有一個NN能夠寫入edits
-客戶端fencing,確保只有一個NN能夠響應客戶端的請求
- DN fencing,確保只有一個NN能夠向DN下發刪除等命令
HDFS文件讀取:
HDFS文件寫入:
MapReduce基本流程:
從MapReduce 自身的命名特色能夠看出, MapReduce 由兩個階段組成:Map 和Reduce。用戶只需編寫map() 和 reduce() 兩個函數,便可完成簡單的分佈式程序的設計。
map() 函數以key/value 對做爲輸入,產生另一系列 key/value 對做爲中間輸出寫入本地磁盤。 MapReduce 框架會自動將這些中間數據按照 key 值進行彙集,且key 值相同(用戶可設定彙集策略,默認狀況下是對 key 值進行哈希取模)的數據被統一交給 reduce() 函數處理。
reduce() 函數以key 及對應的value 列表做爲輸入,經合併 key 相同的value 值後,產生另一系列 key/value 對做爲最終輸出寫入HDFS
hello world --WordCount
用戶編寫完MapReduce 程序後,按照必定的規則指定程序的輸入和輸出目錄,並提交到Hadoop 集羣中。做業在Hadoop 中的執行過程如圖所示。Hadoop 將輸入數據切分紅若干個輸入分片(input split,後面簡稱split),並將每一個split 交給一個Map Task 處理;Map Task 不斷地從對應的split 中解析出一個個key/value,並調用map() 函數處理,處理完以後根據Reduce Task 個數將結果分紅若干個分片(partition)寫到本地磁盤;同時,每一個Reduce Task 從每一個Map Task 上讀取屬於本身的那個partition,而後使用基於排序的方法將key 相同的數據彙集在一塊兒,調用reduce() 函數處理,並將結果輸出到文件中