一、Hadoop系統架構圖
Hadoop1.0與hadoop2.0架構對比圖
YARN架構:
ResourceManager
NodeManager
ApplicationMaster

步驟1 用戶向YARN 中提交應用程序, 其中包括ApplicationMaster 程序、啟動ApplicationMaster 的命令、用戶程序等。
步驟2 ResourceManager 為該應用程序分配第一個Container, 並與對應的NodeManager 通信,要求它在這個Container 中啟動應用程序的ApplicationMaster。
步驟3 ApplicationMaster 首先向ResourceManager 注冊, 這樣用戶可以直接通過ResourceManage 查看應用程序的運行狀態,然后它將為各個任務申請資源,並監控它的運行狀態,直到運行結束,即重復步驟4~7。
步驟4 ApplicationMaster 采用輪詢的方式通過RPC 協議向ResourceManager 申請和領取資源。
步驟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() 函數處理,並將結果輸出到文件中