Hadoop組件
目錄
Hadoop
分散式計算平台,同時也是一個生態圈
- hadoop 1.X HDFS+MapReducer+Common
- hadoop 2.X HDFS+MAP+Reducer+Common
- hadoop 3.X java7->java8,引入糾刪碼,重寫shell腳本,支援超過兩個NameNode,默認埠改變
HDFS
分散式文件存儲系統(可靠,高吞吐),利用目錄樹定位文件
- 可靠性-維護多個副本
- 擴展性-隨時增減伺服器
- 高效性-task並行
- 容錯性-失敗的任務重新分配執行
- 適合一次寫入多次讀出
- 支援數據的追加,不支援隨機修改
HDFS組件
NameNode
- NameNode 存儲文件的元數據,位置資訊
- 配置副本策略
- 管理數據塊映射資訊
- 處理讀寫請求
DataNode
- DataNode 存儲文件的真實數據,並做數據校驗
- 一個數據塊在DN中會存儲數據本身,數據長度,檢驗和以及時間戳。同時DN啟動後會向NN進行註冊,後續每隔一小時向NN彙報數據塊資訊,同時每三秒進行一次NN心跳並帶回NN指令,如果10分鐘沒有心跳訊號,NN會認為該節點宕機。
- 在數據節點退役過程中推薦使用黑名單進行退役,辭職後會進行HDFS數據轉移。
SecondaryNameNode
- SecondaryNameNode 對NameNode做備份,但不能頂替NN提供服務
- 定期合併鏡像文件,編輯日誌,推送給NN
- 可以恢復NN的數據(可能不完整)
Client
- Client切分上傳的文件
- 告知NN文件的位置資訊,交互DN的讀寫數據
- 通過命令管理HDFS
HDFS文件的上傳與下載
- 上傳:客戶端通過HDFS對象向NameNode提交上傳請求,NN確定文件狀態以及父目錄是否存在,返回許可。隨後用戶上傳文件的第一個數據塊,請求NN返回DataNode,NN根據請求返回三個DN節點,用戶通過輸出流請求在一個DN上上傳數據(上傳的DN根據網路拓撲計算決定),然後該DN會調用其他的DN節點將這個通訊信道建立完成。三個節點逐級應答客戶端,客戶端向第一個DN節點上傳一個數據塊,以packet為單位,DN收到後先進行落盤處理,同時將該packet傳送給第二個DN節點然後再傳給第三個DN節點。當第一個塊傳輸完成後,第二個數據塊重複上面的動作,傳遞完成後關閉傳輸流,傳輸過程中,第一個DN節點會將packet放入一個應答隊列,待所有節點相應完成後表示上傳成功。
- 下載: 客戶端訪問HDFS對象,向NameNode請求下載某文件,NameNode返迴文件的元數據資訊,以及數據塊坐在的位置。客戶端得到資訊後獲取文件輸入流,根據就近原則隨機原則隨機挑選一個DN節點獲取packet,客戶端收到後現在本地快取,然後寫入目標文件。
NameNode與SecondaryNameNode的機制
- NN在啟動後會將fsimage和edits載入到記憶體里,格式化後則是創建。客戶端對HDFS進行操作後,NN先將操作記錄到日誌中,然後再記憶體中進行操作,2NN向NN詢問是否CheckPoint,帶回指令。如果CheckPoint,NN會生成一個滾動的日誌文件,一個磁碟中編輯日誌的複製文件,將磁碟中的鏡像文件和複製好的編輯日誌文件複製到2NN中,載入到2NN記憶體中合併成一個合併文件,返回到NN中,NN用重命名的方式覆蓋原文件。
- fsimage是HDFS文件系統中元數據的一個永久性檢查點
- edits存放HDFS文件系統中所有的更新操作
- CheckPoint觸發點為1小時或者edits執行了一百萬次操作。2NN在一分鐘內確認三次NN的操作次數
Yarn組件
- ResourceManager 處理客戶端請求,監控NodeManager,啟動ApplicationMaster,調度資源
- NodeManager 管理單個節點上的資源,處理ResourceManager的命令,處理ApplicationMaster的命令
- Contianer 封裝單個節點上的資源
- ApplicationMaster 負責數據切分,為應用申請資源,監控任務
MapReduce框架⭐
- 常用的數據序列化類型 String-》Text | Map-》MapWritable | Array-》ArrayWritable
- 一個運算程式一般是一個map階段和一個reduce階段,MapTask並發執行,互不相干。ReduceTask並發執行,依賴MapTask的數據結果。
- 關於進程,mrAppMaster負責過程調度和狀態協調,MapTask負責map階段的數據處理。ReduceTask負責reduce階段的數據處理。