Hadoop详解(五):HDFS HA 和 Federation
1. Hadoop 2.0 產生背景
- Hadoop 1.0中HDFS和MapReduce在高可用、擴展性等方面存在問題
- HDFS存在的問題
- NameNode單點故障,難以應用于在線場景 HA
- NameNode壓力過大,且內存受限,影擴展性 Federation
- MapReduce存在的問題響
- JobTracker訪問壓力大,影響系統擴展性
- 難以支持除MapReduce之外的計算框架,比如Spark、Storm等
2. Hadoop 1.x 和Hadoop 2.x
Hadoop 2.x由HDFS、MapReduce和YARN三個分支構成:
- 離線計算,基于磁盤I/O計算
2.1 HDFS 2.x
- 解決HDFS 1.0中單點故障和內存受限問題。
- 解決單點故障
- HDFS HA:通過主備NameNode解決
- 如果主NameNode發生故障,則切換到備NameNode上
- 解決內存受限問題
- HDFS Federation(聯邦)
- 水平擴展,支持多個NameNode;
- (2)每個NameNode分管一部分目錄;
- (1)所有NameNode共享所有DataNode存儲資源
- 2.x僅是架構上發生了變化,使用方式不變
- 對HDFS使用者透明
- HDFS 1.x中的命令和API仍可以使用
3. HDFS 2.x Federation(聯邦)
通過多個namenode/namespace把元數據的存儲和管理分散到多個節點中,使到namenode/namespace可以通過增加機器來進行水平擴展。
能把單個namenode的負載分散到多個節點中,在HDFS數據規模較大的時候不會也降低HDFS的性能??梢酝ㄟ^多個namespace來隔離不同類型的應用,把不同類型應用的HDFS元數據的存儲和管理分派到不同的namenode中。
4. HDFS 2.x HA(高可用)
主備NameNode
Hadoop HA主要是解決NameNode單點故障問題,主NameNode對外提供服務,備NameNode同步主NameNode元數據,以待切換。所有DataNode同時向兩個NameNode匯報數據塊信息(位置)。并且在Hadoop HA中還含有JNN集群用來存儲共享存儲狀態(shared edits文件)。處于StandyBy節點的NameNode,主要作用是完成了edits.log文件的合并產生新的image,推送回給Active NameNode。該步驟和SecondaryNameNode的備份功能類似,通過這種方式保證了StandyBy節點的NameNode和Actvie NameNode的fsimage文件一致。edit文件通過JNN集群存儲共享存儲狀態,active namenode處理所有的操作請求(讀寫),讀寫入到這個共享狀態的集群節點。
HDFS HA保持NameNode元數據信息一致,也就是說保持fsimge和edits文件保持一致。fsimge和edits文件在HDFS 格式化之后產生。
Hadoop的元數據主要作用是維護HDFS文件系統中文件和目錄相關信息。元數據的存儲形式主要有3類:內存鏡像、磁盤鏡像(FSImage)、日志(EditLog)。在Namenode啟動時,會加載磁盤鏡像到內存中以進行元數據的管理,存儲在NameNode內存;磁盤鏡像是某一時刻HDFS的元數據信息的快照,包含所有相關Datanode節點文件塊映射關系和命名空間(Namespace)信息,存儲在NameNode本地文件系統;日志文件記錄client發起的每一次操作信息,即保存所有對文件系統的修改操作,用于定期和磁盤鏡像合并成最新鏡像,保證NameNode元數據信息的完整,存儲在NameNode本地和共享存儲系統(QJM)中。
4.1 共享存儲(shared edits)
active namenode處理所有的操作請求(讀寫),standby namenode只同步狀態datanode會同時向兩個namenode發送block報告和心跳當滿足一次checkpoint時,standby namenode進行一次合并操作active NN執行任何命名空間的修改都會持久化到一半以上的journalnodes上而Standby NN負責觀察edits log的變化,它能夠讀取從JNs中讀取edits信息,并更新其內部的命名空間一旦Active NN出現故障,Standby NN將會保證從JNs中讀出了全部的Edits,然后切換成Active狀態一次checkpoint過程
4.2 切換機制
- 手動切換:通過命令實現主備之間的切換,可以用HDFS升級等場合
- 自動切換:基于Zookeeper實現
基于Zookeeper自動切換方案
- ZooKeeper Failover Controller:監控NameNode健康狀態,
- 當NameNode啟動時,會向Zookeeper注冊NameNode
- NameNode掛掉后,ZKFC為NameNode競爭鎖,獲得ZKFC 鎖的NameNode變為active
總結
以上是生活随笔為你收集整理的Hadoop详解(五):HDFS HA 和 Federation的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 大数据:Hive和Hbase的区别于优势
- 下一篇: Hadoop详解(七):YARYN完全分