第八章 Hadoop 再探討
寫在章節前面的話
- Hadoop的優化和發展主要體現在兩個方面:
- Hadoop兩大核心元件MapReduce和HDFS的架構的改進與提升。
- hadoop系統的其他元件不斷豐富,通過優化和提升,Hadoop可以支援更多的應用場景,提高更高的叢集可用性,也帶來更高的資源利用率
- 本章內容概覽
- Hadoop侷限
- Hadoop在核心元件元件的新發展
- Hadoop生態系統的成員
8.1 Hadoop的優化與發展
- Hadoop1.0 核心元件(僅指MapReduce和HDFS)主要存在以下不足:
- 抽象層次低,編碼複雜
- 表達能力有限
- 開發者需要自己管理作業依賴關係
- 難以看到程式整體邏輯。
- 執行迭代操作效率低。
- 資源浪費
- 實時性差
- Hadoopdoop改進
- 表8.1
- 表8.2
8.2 HDFS2.0 新特性
8.2.1 HDFS HA
- 兩個名稱節點的狀態同步,可以藉助於一個共享儲存系統來實現,比如 NFS、QJM、或者Zookeeper.
- 活躍名稱節點的更新資料寫入到共享儲存系統
- 待命名稱節點會一直監聽該系統,一旦有新的寫入,就立即從公共儲存系統中讀取這些資料並載入到自己的記憶體中,從而保證名稱節點狀態的完全同步。
- 要保證待命名稱節點一直包含最新的叢集各個塊的位置資訊
- 需要給資料節點配備兩個名稱節點的地址,並把塊的位置資訊和心跳資訊同時傳送到兩個名稱節點。
- Zookeeper可以確保任意時刻只有一個名稱節點對外服務。如果HDFS叢集中有“兩個管家”,會導致資料丟失或者其他異常。
8.2.2 HDFS 聯邦
- HDFS1.0 中存在的問題
- 單點故障
- 可擴充套件性
- 不可以橫向擴充套件
- 不可以縱向擴充套件
- 會帶來過長的系統啟動時間
- 當在記憶體空間清理時,傳送錯誤,就會導整個HDFS叢集當機。
- 效能
- 整個檔案系統的效能會受限於單個名稱節點的吞吐量
- 隔離性
- 單個名稱節點無法難以提供不同程式之間的隔離性,一個程式可能影響其他執行的程式
- HDFS聯邦的設計 1.
- HDFS聯邦的訪問方式
- HDFS聯邦相對於HDFS1.0的優勢
- 可擴充套件性
- 效能更好
- 良好的隔離性
- HDFS聯邦並不能解決單點故障的問題,需要為每個名稱節點部署一個後備名稱節點,以應對名稱節點當機後對業務產生的影響
8.3 新一代資源管理排程框架YARN
8.3.1 MapReduce1.0 的缺陷
- 採取了Master/Slave 架構設計,包括一個JobTrack和若干個TaskTrack
- 前者負責作業的排程和資源的管理,後者負責執行JobTracker指派的具體的任務
- 這種架構很難克服的缺陷
- 存在單點故障
- JobTracker任務過重。
- 容易造成記憶體溢位
- 資源分配不合理
- 圖8-4
8.3.2 YARN設計思路
- 基本思路就是放權,即不讓JobTracker這一元件承擔過多的任務,把原JobTraker三大功能(資源管理、任務排程、任務監控)進行拆分
- YARN包括ResourceManager、ApplicationMaster和NodeManager
- ResourceManager:負責資源管理
- ApplicationManager:負責任務排程和監控
- NodeManager負責執行TaskTracker任務
- 圖 8-5
8.3.3 YARN 體系結構
- 圖 8-6
- 表8-3