zookeeper在Hadoop集群中的作用(一)


一、什么是Zookeeper 


ZooKeeper 顧名思義 動物園管理員,他是拿來管大象(Hadoop) 、 蜜蜂(Hive) 、 小豬(Pig)  的管理員, Apache Hbase和 Apache Solr 以及LinkedIn sensei  等項目中都采用到了 Zookeeper。ZooKeeper是一個分布式的,開放源碼的分布式應用程序協調服務,ZooKeeper是以Fast Paxos算法為基礎,實現同步服務,配置維護和命名服務等分布式應用。

HDFS HA原理

單NameNode的缺陷存在單點故障的問題,如果NameNode不可用,則會導致整個HDFS文件系統不可用。所以需要設計高可用的HDFS(Hadoop HA)來解決NameNode單點故障的問題。解決的方法是在HDFS集群中設置多個NameNode節點。但是一旦引入多個NameNode,就有一些問題需要解決。
· HDFS HA需要保證的四個問題:

  • 保證NameNode內存中元數據數據一致,並保證編輯日志文件的安全性。
  • 多個NameNode如何協作
  • 客戶端如何能正確地訪問到可用的那個NameNode。
  • 怎么保證任意時刻只能有一個NameNode處於對外服務狀態。
    · 解決方法
  • 對於保證NameNode元數據的一致性和編輯日志的安全性,采用Zookeeper來存儲編輯日志文件。
  • 兩個NameNode一個是Active狀態的,一個是Standby狀態的,一個時間點只能有一個Active狀態的
    NameNode提供服務,兩個NameNode上存儲的元數據是實時同步的,當Active的NameNode出現問題時,通過Zookeeper實時切換到Standby的NameNode上,並將Standby改為Active狀態。
    o 客戶端通過連接一個Zookeeper的代理來確定當時哪個NameNode處於服務狀態

a· HDFS HA架構中有兩台NameNode節點,一台是處於活動狀態(Active)為客戶端提供服務,另外一台處於熱備份狀態(Standby)。
b· 元數據文件有兩個文件:fsimage和edits,備份元數據就是備份這兩個文件。JournalNode用來實時從Active NameNode上拷貝edits文件,JournalNode有三台也是為了實現高可用。
c· Standby NameNode不對外提供元數據的訪問,它從Active NameNode上拷貝fsimage文件,從JournalNode上拷貝edits文件,然后負責合並fsimage和edits文件,相當於SecondaryNameNode的作用。最終目的是保證Standby NameNode上的元數據信息和Active NameNode上的元數據信息一致,以實現熱備份。
d· Zookeeper來保證在Active NameNode失效時及時將Standby NameNode修改為Active狀態。
e· ZKFC(失效檢測控制)是Hadoop里的一個Zookeeper客戶端,在每一個NameNode節點上都啟動一個ZKFC進程,來監控NameNode的狀態,並把NameNode的狀態信息匯報給Zookeeper集群,其實就是在Zookeeper上創建了一個Znode節點,節點里保存了NameNode狀態信息。當NameNode失效后,ZKFC檢測到報告給Zookeeper,Zookeeper把對應的Znode刪除掉,Standby ZKFC發現沒有Active狀態的NameNode時,就會用shell命令將自己監控的NameNode改為Active狀態,並修改Znode上的數據。
Znode是個臨時的節點,臨時節點特征是客戶端的連接斷了后就會把znode刪除,所以當ZKFC失效時,也會導致切換NameNode。
f· DataNode會將心跳信息和Block匯報信息同時發給兩台NameNode,DataNode只接受Active NameNode發來的文件讀寫操作指令。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM