能够启动 hbase shell,但无法在 shell 上工作

Able to Launch hbase shell, but unable to work on the shell

我启动了 zookeeper,它说 zookeeper 服务器已启动,但有以下反馈:

ZooKeeper JMX enabled by default
Using config: /home/saichanda/zookeeper-3.4.12/bin/../conf/zoo.cfg
mkdir: cannot create directory ‘’: No such file or directory
Starting zookeeper ... STARTED

然后我使用

启动hbase
./bin/start-hbase.sh

输出:

starting master, logging to /usr/local/hbase/bin/../logs/hbase-root-master-saichanda-OptiPlex-9020.out

那我下命令,

./bin/hbase shell

这会打开 hbase shell 但是当我在 shell 中创建一个 table 时,它会抛出以下

错误:

2018-07-28 11:19:07,563 ERROR [main] zookeeper.RecoverableZooKeeper: ZooKeeper exists failed after 4 attempts
2018-07-28 11:19:07,564 WARN  [main] zookeeper.ZKUtil: hconnection-0x10823d720x0, quorum=localhost:2181, baseZNode=/hbase Unable to set watcher on znode (/hbase/hbaseid)
org.apache.zookeeper.KeeperException$ConnectionLossException: KeeperErrorCode = ConnectionLoss for /hbase/hbaseid
at org.apache.zookeeper.KeeperException.create(KeeperException.java:99)
at org.apache.zookeeper.KeeperException.create(KeeperException.java:51)
at org.apache.zookeeper.ZooKeeper.exists(ZooKeeper.java:1045)
at org.apache.hadoop.hbase.zookeeper.RecoverableZooKeeper.exists(RecoverableZooKeeper.java:220)
at org.apache.hadoop.hbase.zookeeper.ZKUtil.checkExists(ZKUtil.java:419)
at org.apache.hadoop.hbase.zookeeper.ZKClusterId.readClusterIdZNode(ZKClusterId.java:65)
at org.apache.hadoop.hbase.client.ZooKeeperRegistry.getClusterId(ZooKeeperRegistry.java:105)
at org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation.retrieveClusterId(ConnectionManager.java:905)
at org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation.<init>(ConnectionManager.java:648)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)

我们是否需要将 zookeeper 日志和 hbase 的位置放在同一目录中?

即使在设置后我也遇到了错误

export HBASE_MANAGES_ZK=true

但是,在hbase-site.xml文件中,我希望hbase存储其内置zookeeper文件的路径与hbase目录不同

有不同的地址可以吗,还是它们应该在同一个目录中?

如何解决这个错误,运行 hbase shell 顺利?

确保您在 hbase-site.xml 中指定了以下有效值。我假设这是非 HA 设置,因为您已经要求 hbase 托管它自己的 Zk。

<property>
    <name>hbase.zookeeper.property.dataDir</name>
    <value>{absolute_path}</value>
</property>
<property>
    <name>hbase.zookeeper.property.clientPort</name>
    <value>2181</value>
</property>
<property>
    <name>hbase.zookeeper.quorum</name>
    <value>{hostname}</value>
</property>
<property>
    <name>hbase.cluster.distributed</name>
    <value>true</value>
</property>

添加完后重启hbase进程,查看hbase日志没有错误。可以在 ${hbase_home}/logs/

找到