ZooKeeper 是一個分布式協調服務,由 Apache 基金會開發,專為分布式系統設計。它提供了高可用、高性能、一致性的核心服務,幫助分布式應用解決諸如配置管理、命名服務、分布式鎖、集群協調等問題。
ZooKeeper 的核心特點:
- 簡單易用:提供類似文件系統的樹形數據結構(ZNode),支持增刪改查操作。
- 高可用:通過集群部署(通常 3 或 5 個節點)實現容錯,少數節點故障不影響整體服務。
- 一致性:保證分布式環境中數據的強一致性(通過 ZAB 協議實現)。
- 實時性:能在一定時間內(毫秒級)將數據變更同步到所有節點。
ZooKeeper 在 Hadoop 中的作用
Hadoop 是一個分布式系統生態,包含 HDFS、MapReduce、YARN 等組件。ZooKeeper 作為核心協調者,為這些組件提供關鍵支持,具體作用如下:
1. 對 HDFS 的支持
NameNode 高可用(HA)
HDFS 中,NameNode 是管理元數據的核心節點,單點故障會導致整個集群不可用。
ZooKeeper 用于:- 故障檢測:通過心跳機制監控 Active NameNode 的狀態。
- 自動故障轉移:當 Active NameNode 故障時,ZooKeeper 協調 Standby NameNode 切換為 Active 狀態。
- 分布式鎖:確保同一時間只有一個 Active NameNode 對外提供服務(避免 “腦裂” 問題)。
JournalNode 協調
在 HDFS HA 架構中,JournalNode 用于同步 NameNode 的元數據 edits 日志。ZooKeeper 負責協調 JournalNode 集群的狀態一致性。
2. 對 YARN 的支持
ResourceManager 高可用(HA)
YARN 中,ResourceManager 負責集群資源調度和任務管理。ZooKeeper 實現其高可用:- 監控 Active ResourceManager 的健康狀態。
- 當 Active 節點故障時,自動將 Standby 節點切換為 Active。
- 維護 ResourceManager 的狀態信息(如應用程序隊列、資源分配等)。
節點注冊與狀態管理
NodeManager(工作節點)啟動時會向 ZooKeeper 注冊自身信息,ResourceManager 通過 ZooKeeper 感知節點的上下線狀態。
3. 對其他 Hadoop 生態組件的支持
HBase:
- 存儲 RegionServer 的元數據和狀態,協調 Region 分區的負載均衡。
- 實現 HMaster 的高可用(類似 NameNode HA 機制)。
Kafka:
- 存儲主題(Topic)的元數據、分區副本分布信息。
- 管理消費者組(Consumer Group)的偏移量(舊版本,新版本已部分遷移至 Kafka 自身)。
Flume:
- 協調多個 Agent 節點的配置同步和故障恢復。
4. 通用協調功能
- 配置管理:存儲 Hadoop 集群的全局配置(如節點列表、服務端口等),所有節點通過 ZooKeeper 實時獲取最新配置。
- 命名服務:為 Hadoop 組件提供統一的命名空間(如通過路徑標識 NameNode、ResourceManager 等服務)。
- 分布式鎖:解決分布式環境中資源競爭問題(如多個節點同時修改元數據)。
總結
ZooKeeper 是 Hadoop 分布式生態的 “神經中樞”,它通過提供可靠的協調服務,解決了分布式系統中最核心的一致性、高可用和同步問題,確保 HDFS、YARN 等組件能夠穩定、高效地協同工作。沒有 ZooKeeper,Hadoop 集群的容錯能力和擴展性將大幅下降。