HBase 如何使用 ZooKeeper?

Posted

技术标签:

【中文标题】HBase 如何使用 ZooKeeper?【英文标题】:How HBase uses ZooKeper? 【发布时间】:2015-02-16 13:46:01 【问题描述】:

我知道ZooKeper是提供分布式同步的平台。但是HBase是如何使用ZooKeper的呢?

【问题讨论】:

【参考方案1】:

Apache ZooKeeper 是一个用于分布式的客户端/服务器系统 公开类似于文件系统的接口的协调,其中 每个节点(称为 znode)可能包含数据和一组子节点。 每个 znode 都有一个名称,并且可以使用类似文件系统的方式进行识别 路径(例如,/root-znode/sub-znode/my-znode)。

在 Apache HBase 中,ZooKeeper 协调、通信和共享状态 在 Masters 和 RegionServers 之间。 HBase 的设计策略是 仅将 ZooKeeper 用于瞬态数据(即,用于协调和 国家通讯)。因此,如果 HBase 的 ZooKeeper 数据被删除, 只有瞬态操作受到影响——数据可以继续 向/从 HBase 写入和读取。

来自cloudera

在分布式系统中

在分布式系统中HBase 将表拆分为区域服务器并使用两个特殊表-ROOT-.META. 来查找托管各种表的区域的位置。

与 HBase 中的所有表一样,-ROOT-.META。也分为 地区。 -ROOT-.META. 都是特殊表; -ROOT- 永远不会分裂成多个区域。 .META. 可以根据需要拆分为多个区域(与其他表一样)。

当客户端应用程序想要访问特定行时,它会访问-ROOT- 表并询问在哪里可以找到负责特定行的区域。 -ROOT- 提供此信息并重定向到 .META. 表的区域。

然后:

如何找到-ROOT- 表?

HBase 系统的入口点由另一个名为 ZooKeeper 的系统提供。

在本地系统中

在本地 DataNode 系统中,您不需要 ZooKeeper

结论

ZooKeeper 被 HBase 在分布式区域系统中用于查找 -ROOT- 表。

见https://blogs.apache.org/hbase/entry/hbase_who_needs_a_master

【讨论】:

【参考方案2】:

Apache ZooKeeper 是一个用于分布式协调的客户端/服务器系统,它公开了一个类似于文件系统的接口,其中每个节点(称为 znode)可能包含数据和一组子节点。每个 znode 都有一个名称,并且可以使用类似文件系统的路径(例如,/root-znode/sub-znode/my-znode)来标识。

在 Apache HBase 中,ZooKeeper 在 Master 和 RegionServer 之间协调、通信和共享状态。 HBase 的设计策略是仅将 ZooKeeper 用于瞬态数据(即用于协调和状态通信)。因此,如果 HBase 的 ZooKeeper 数据被删除,只有临时操作会受到影响——数据可以继续写入 HBase 或从 HBase 读取数据。

目前,hbase 客户端通过询问 zookeeper 来找到要连接的集群。客户端需要的唯一配置是要连接的 zk quorum。主节点和 hbase 从节点(regionservers)都向 zk 注册。如果他们的 znode 消失,则认为 master 或 regionserver 丢失并开始修复

【讨论】:

以上是关于HBase 如何使用 ZooKeeper?的主要内容,如果未能解决你的问题,请参考以下文章

HBase 如何使用 ZooKeeper?

经验分享hbase client 如何选择

HBase性能调优:各个参数该如设置,客户端该如何优化

什么是Zookeeper,Zookeeper的作用是什么,在Hadoop及hbase中具体作用是什么

Linux安装HBase使用Zookeeper设置

HBase安装配置,使用独立zookeeper