当我们使用 zookeeper 来协调一组 Hbase 节点时,zookeeper 可以与 Hbase 节点位于相同的节点上,还是必须位于单独的集群上?还有一件事我无法清楚地理解是什么时候创建了 Zookeeper znode 以及 zookeeper znode 的目的是什么?Zookeeper官网说这些是zookeeper文件系统的一部分,那么zookeeper znode到底是用来存储什么的?是配置属性、应用数据还是具体是什么内容?
3 回答
您可以在与 hbase 相同的节点上运行 zookeeper,但出于性能原因,您可能希望在单独的节点上运行 zookeeper。hbase文档说,
您可以运行仅包含 1 个节点的 ZooKeeper 集成,但在生产中建议您运行 3、5 或 7 台机器的 ZooKeeper 集成;ensemble 拥有的成员越多,ensemble 对主机故障的容忍度就越高。另外,运行奇数台机器。如果成员数量是偶数,则不能有法定人数。给每个 ZooKeeper 服务器大约 1GB 的 RAM,如果可能的话,给它自己的专用磁盘(专用磁盘是确保高性能 ZooKeeper 集成的最佳选择)。对于负载非常重的集群,在与 RegionServer(DataNode 和 TaskTracker)不同的机器上运行 ZooKeeper 服务器。
你可以在这里看到 hbase 使用 zookeeper 的一些方式。
要回答以下问题,
我无法清楚地理解 Zookeeper znode 是何时创建的,zookeeper znode 的目的是什么?那么zookeeper znode到底是用来存储什么的?是配置属性、应用数据还是具体是什么内容?
Zookeeper ZNodes 是 Zookeeper 状态的一部分,是 Zookeeper 的数据节点。它是一个文件夹,同时也存储数据。您可以在这些 znode 上存储少量数据。所有 znode 都存储数据,并且除了临时 znode 之外的所有 znode 都可以有子节点。Zookeeper 客户端可以通过 ZooKeeper API 操作 znode 和数据。阅读Zookeeper 教程和客户端 API 示例文章以了解更多信息
Zookeeper 对 znode 路径使用标准 UNIX 表示法。例如,znode 路径 /A/B/C 表示到 znode C 的路径,其中 C 以 B 作为其父节点,B 以 A 作为其父节点。
ZNode 分为三种类型:
常规:客户端通过显式创建和删除常规 znode 来操作它们。
Ephemeral:客户端创建这样的 znode,他们要么明确地删除它们,要么让系统在创建它们的会话终止时自动删除它们。
Sequential:这些 Znode 在创建时会获得一个唯一的编号(序列),并以它的名称为后缀。
Hbase 主服务器创建 zookeeper znode /hbase 。然后将其用于 hbase 守护进程进行协调。甚至活动 Hbase 主服务器的名称也存储在此处。如果 hbase master 死了,备份 hbase master 会覆盖 znode 的内容,以便客户端和区域服务器知道新的 master。除此之外,区域信息也在 zookeeper znodes 中维护。