Hadoop系統架構

1、Hadoop系統架構圖架構

Hadoop1.0與hadoop2.0架構對比圖框架

 

YARN架構:分佈式

ResourceManager函數

–處理客戶端請求
–啓動/監控ApplicationMaster
–監控NodeManager
–資源分配與調度

NodeManageroop

–單個節點上的資源管理
–處理來自ResourceManager的命令
–處理來自ApplicationMaster的命令

ApplicationMaster設計

–數據切分
–爲應用程序申請資源,並分配給內部任務
–任務監控與容錯
 
YARN做業處理流程:
 

步驟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上帶來的好處 :

–一個集羣部署多個版本
–計算資源按需伸縮
–不一樣負載應用混搭,集羣利用率高
–共享底層存儲,避免數據跨集羣遷移
 
Hadoop 2.0  HA實現方式說明:

利用共享存儲在兩個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() 函數處理,並將結果輸出到文件中

相關文章
相關標籤/搜索