分布式 Apache HBase 安装依赖于正在运行的 ZooKeeper 集群。所有参与节点和客户端都需要能够访问正在运行的 ZooKeeper 集合。 Apache HBase 默认为您管理 ZooKeeper“集群”。它将启动和停止 ZooKeeper 集合作为 HBase 启动/停止过程的一部分。您还可以独立于 HBase 管理 ZooKeeper 集合,只需将 HBase 指向它应该使用的集群。要切换 ZooKeeper 的 HBase 管理,请使用 conf / hbase-env.sh 中的HBASE_MANAGES_ZK变量。此变量默认为true,告诉 HBase 是否启动/停止 ZooKeeper 整体服务器作为 HBase 启动/停止的一部分。

当 HBase 管理 ZooKeeper 集合时,您可以直接在 conf / hbase-site.xml 中指定 ZooKeeper 配置。通过在 ZooKeeper 选项名称前加上hbase.zookeeper.property,可以将 ZooKeeper 配置选项设置为 HBase hbase-site.xml XML 配置文件中的属性。例如,可以通过设置hbase.zookeeper.property.clientPort属性来更改 ZooKeeper 中的clientPort设置。对于 HBase 使用的所有默认值,包括 ZooKeeper 配置,请参见 hbase 默认配置。查找hbase.zookeeper.property前缀。有关 ZooKeeper 配置的完整列表,请参阅 ZooKeeper 的 zoo.cfg 。 HBase 不附带 zoo.cfg ,因此您需要在适当的 ZooKeeper 下载中浏览 conf 目录。

您必须至少使用hbase.zookeeper.quorum属性列出 hbase-site.xml 中的整体服务器。此属性默认为localhost上的单个集合成员,它不适用于完全分布式 HBase。 (它仅绑定到本地计算机,远程客户端将无法连接)。

例如,让 HBase 管理节点 rs {1,2,3,4,5} .example.com 上的 ZooKeeper 仲裁,绑定到端口 2222(默认为 2181),确保HBASE_MANAGE_ZK为在 conf / hbase-env.sh 中注释掉或设置为true,然后编辑 conf / hbase-site.xml 并设置hbase.zookeeper.property.clientPorthbase.zookeeper.quorum。您还应该将hbase.zookeeper.property.dataDir设置为默认值以外的值,因为默认情况下 ZooKeeper 会在 / tmp 下保留数据,这通常会在系统重启时清除。在下面的示例中,我们将 ZooKeeper 持久保存到 / user / local / zookeeper

 <configuration>
    ...
    <property>
      <name>hbase.zookeeper.property.clientPort</name>
      <value>2222</value>
      <description>Property from ZooKeeper's config zoo.cfg.
      The port at which the clients will connect.
      </description>
    </property>
    <property>
      <name>hbase.zookeeper.quorum</name>
      <value>rs1.example.com,rs2.example.com,rs3.example.com,rs4.example.com,rs5.example.com</value>
      <description>Comma separated list of servers in the ZooKeeper Quorum.
      For example, "host1.mydomain.com,host2.mydomain.com,host3.mydomain.com".
      By default this is set to localhost for local and pseudo-distributed modes
      of operation. For a fully-distributed setup, this should be set to a full
      list of ZooKeeper quorum servers. If HBASE_MANAGES_ZK is set in hbase-env.sh
      this is the list of servers which we will start/stop ZooKeeper on.
      </description>
    </property>
    <property>
      <name>hbase.zookeeper.property.dataDir</name>
      <value>/usr/local/zookeeper</value>
      <description>Property from ZooKeeper's config zoo.cfg.
      The directory where the snapshot is stored.
      </description>
    </property>
    ...
  </configuration>