Zookeeper 簡單介紹
Zookeeper 分布式服務框架是 Apache Hadoop 的一個子項目。它主要是用來解決分布式應用中常常遇到的一些數據管理問題,如:統一命名服務、狀態同步服務、集群管理、分布式應用配置項的管理等。
用戶能夠在不了解分布式底層細節的情況下,開發分布式程序。充分利用集群的威力進行快速運算和存儲。
Hadoop主要包括兩部分:HDFS,YARN。
HDFS有高
容錯性的特點,並且設計用來部署在低廉的(low-cost)硬件上;並且它提供高吞吐量(high throughput)來訪問
應用程序的數據,適合那些有着超大數據集(large data set)的應用程序。HDFS放寬了(relax)POSIX的要求。能夠以流的形式訪問(streaming access)文件系統中的數據。
YARN 主要包括ResourceManager(RM),以及NodeManager(NM),ApplicationManager(AM),Container四個部分組成。當中RM最為核心。作為全局的資源管理器,他主要負責系統的資源管理與分配
關於Hadoop的的很多其它介紹可參考:
http://hadoop.apache.org/
Hadoop面臨的問題
在Hadoop中,無論是HDFS,還是YARN,都存在一個問題,因為HDFS使用NameNode管理眾多的DataNode節點,YARN使用ResourceManager管理系統的資源分配。所以假設NN節點或者是RM
節點出現故障,都會導致整個集群不能正常使用,為了解決問題Hadoop針對NN以及RM引入了 支持Active/StandBy 模式的HA架構。
正常情況下對於NN以及RM,分別僅僅會有一個Active節點,其它節點為Standby,Active節點負責對外提供服務,當Active的節點因為異常不能對外提供服務時,standby節點會轉化為Active節點,繼續提供服務
Zookeeper幫助Hadoop解決的問題
下文以YARN為例,描寫敘述Zookeeper是怎樣幫助YARN實現HA機制的
- 創建鎖節點
全部的ResourceManager在啟動的時候會競爭寫一個/yarn-leader-election/pseudo-yarn-rm-cluster節點(暫時節點)。創建成功的ResourceManager節點變成Active節點,其它的切換為StandBy - 注冊Watcher節點
全部的standby的ResourceManager節點會向/yarn-leader-election/pseudo-yarn-rm-cluster節點注冊一個Watcher - 主備切換
當Active的ResourceManager節點出現異常或掛掉時。起在zookeeper上創建的暫時節點也會被刪除。standy的ResourceManager節點檢測到該節點發生變化時,會又一次發起競爭,直到產生一個Active節點 - 假設集群中存在兩個ResourceManager節點RM1,RM2,在通過競爭操作后。RM1變成了Active后。假設某個時間段RM1因為資源損耗比較嚴重。產生了假死的現象。此時的zookeeper會以為RM1這台機器出現了故障。於是發起新一輪的競選,選了RM2作為Active,在RM2變成Active后,RM1恢復了服務可是它任然以為自己是Active的,此時就出現了兩個Active的情況。這樣的情況又稱為“腦裂”,為了解決這樣的問題能夠在創建根節點的時候引入ACL控制,這樣的話當RM1恢復后嘗試更新數據時,會發現相應的節點必須提供RM2的ACL信息才干夠更新相應的數據
- 在Hadoop中負責解決該問題的組件是Hadoop-common 中的ActiveStandElector組件
