【问题标题】:Hbase error zookeeper exists failed after 3 retiries3 次重试后 Hbase 错误 zookeeper 存在失败
【发布时间】:2015-10-18 21:24:56
【问题描述】:

我在 Ubuntu 中使用 HBASE 0.94.8 独立模式。它工作正常,我能够在 Hbase-shell 中执行所有操作。但是在我登录我的系统后,它给出了以下错误

15/07/28 15:10:30 ERROR zookeeper.RecoverableZooKeeper: ZooKeeper exists failed after 3 retries
15/07/28 15:10:30 WARN zookeeper.ZKUtil: hconnection-0x14ed40513350009 Unable to set watcher on znode (/hbase)
org.apache.zookeeper.KeeperException$ConnectionLossException: KeeperErrorCode = ConnectionLoss for /hbase
    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:1041)
    at org.apache.hadoop.hbase.zookeeper.RecoverableZooKeeper.exists(RecoverableZooKeeper.java:172)
    at org.apache.hadoop.hbase.zookeeper.ZKUtil.checkExists(ZKUtil.java:450)
    at org.apache.hadoop.hbase.zookeeper.ZooKeeperNodeTracker.checkIfBaseNodeAvailable(ZooKeeperNodeTracker.java:208)
    at org.apache.hadoop.hbase.zookeeper.RootRegionTracker.waitRootRegionLocation(RootRegionTracker.java:77)
    at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.locateRegion(HConnectionManager.java:885)
    at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.locateRegionInMeta(HConnectionManager.java:998)
    at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.locateRegion(HConnectionManager.java:896)
    at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.locateRegionInMeta(HConnectionManager.java:998)
    at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.locateRegion(HConnectionManager.java:900)
    at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.locateRegion(HConnectionManager.java:857)

是的,我确实搜索了很多。我找到了一些信息ZooKeeper exists failed after 3 retries。可能这个错误是因为 zookeeper 已停止。但我不知道要重新启动它。我尝试再次启动Hbasethrift,但这仍然是问题。

这个命令ps axww | grep QuorumPeerMain 给了我以下输出:

 6162 pts/2    S+     0:00 grep --color=auto QuorumPeerMain

如果我重新启动系统,Hbase 就会开始工作。但我想要适当的解决方案。


临时解决方案

使用以下命令我 grep 这个 HBASE 进程:

ps -fe grep | hbase

然后杀死HBASE的所有进程:

kill -9 4555//assuming 4555 is process id of hbase

然后用 sudo 和 thrift 重新启动 hbase,它开始工作,但我想要永久解决方案。因为如果我在服务器中使用 HBASE(意味着不是本地机器)我不能每次都重新启动 HBASE。

【问题讨论】:

    标签: hbase apache-zookeeper


    【解决方案1】:

    问题

    Hbase 错误 zookeeper 存在 3 次重试失败 清楚地表明 zookeeper quorum 没有运行 - 最可能的原因可能是与 conf/hbase-site.xml 中的 zookeeper.quorum 设置不一致,最小值必须是:

    <configuration>
      <property>
        <name>hbase.rootdir</name>
        <value>file:///home/testuser/hbase</value>
      </property>
      <property>
        <name>hbase.zookeeper.property.dataDir</name>
        <value>/home/testuser/zookeeper</value>
      </property>
    </configuration>
    

    在下一节中,简要地提到了为什么需要 zookeeper 以及如何验证它是否正在运行。


    概述

    从您的文本中预先假设(独立设置) - 您将事情搞混了。 Zookeeper 简单来说就是管理 HBase,是必须的。

    默认情况下,HBase 自己处理 zookeeper 设置,启动-停止(尽管可以更改) - 验证查看文件 conf/hbase-evn.sh(在您的 hbase 目录中)必须有一行:

    export HBASE_MANAGES_ZK=true
    

    基本上告诉 HBase 是否应该管理自己的 Zookeeper 实例。如果设置为false,则编辑为true

    现在有一个有用的命令进行验证(忘记ps,然后是grep):

    $ jps
    

    该命令将列出机器上的所有 java 进程(HBase 本身就是一个 Java 应用程序),即可能的输出必须是(对于最小的独立 HBase 设置):

    62019 Jps
    61098 HMaster        
    61233 HRegionServer     
    61003 HQuorumPeer
    

    不要只是杀死 HBase 进程,而是使用启动-停止实用程序:

    $ ./bin/stop-hbase.sh
    

    进行必要的更改并重新开始:

    $ ./bin/start-hbase.sh
    

    PS我可能(完全)误解了您的问题,请在 cmets 中告诉我,我会再次回复您并为即将到来的 SO 访问者提供正确的解决方案。 p>

    【讨论】:

    • 添加到上述解决方案: hbase.rootdir 的值应该存在。面对同样的问题,在 HDFS 中创建文件夹后,将 hbase.rootdir 设置为 hdfs://localhost:9000/hbase 对我来说效果很好。但是,安装 hbase 后的默认目录对我不起作用,因为它不存在。
    • 所以只需在conf/hbase-site.xml 中添加几行就可以了?我们不应该先创建一些目录吗?
    【解决方案2】:

    当您查看日志文件时,您会发现 zookeeper 无法连接到端口。例如,543210。这仅仅意味着 你之前已经在你的机器上安装了 Hadoop,所以 hbase 会尝试查找之前安装的 hadoop 的 zookeeper。请重命名您现有的 hadoop 设置或从系统中完全删除 hadoop。 (但请注意,即使在删除之后,zookeeper 似乎也会留下一些东西。)

    • 重命名 hadoop 安装文件夹
    • 从 .bashrc 文件中删除条目
    • 重启电脑

    【讨论】:

    【解决方案3】:

    该问题似乎与 hbasezookeeper 无关。这是系统设置问题。

    我在更新 Mac OS X 后遇到了同样的问题。

    事实证明,DNS 设置已被更新更改。我在 hbase 日志中看到了这一点:

    2017-06-09 11:40:18,454 ERROR [main] master.HMasterCommandLine: Master exiting
    java.lang.RuntimeException: Failed construction of Master: class org.apache.hadoop.hbase.master.HMasterCommandLine$LocalHMaster
        at org.apache.hadoop.hbase.util.JVMClusterUtil.createMasterThread(JVMClusterUtil.java:143)
    [SKIP]
        at org.apache.hadoop.hbase.master.HMaster.main(HMaster.java:2432)
    Caused by: java.lang.NullPointerException
        at org.apache.hadoop.net.DNS.reverseDns(DNS.java:92)
    

    hbase-site.xml 中删除 DNS 设置后,问题消失了:

      <!--property>
        <name>hbase.zookeeper.dns.interface</name>
        <value>lo0</value>
      </property>
      <property>
        <name>hbase.regionserver.dns.interface</name>
        <value>lo0</value>
      </property>
      <property>
        <name>hbase.master.dns.interface</name>
        <value>lo0</value>
      </property-->
    

    【讨论】:

    • 这行得通!请注意,在重新启动之前,您需要确保没有任何 hbase 进程正在运行。
    【解决方案4】:

    我遇到了几乎相同的错误“ZooKeeper 存在 4 次重试后失败”。这是由于运行./start-hbase.sh而没有连接到2181端口的权限造成的。解决方案结果非常简单:

    sudo ./start-hbase.sh
    

    我使用了与 Nabeel Ahmed 的帖子中相同的 hbase-site.xml 配置。

    【讨论】:

      【解决方案5】:

      如果它是唯一的动物园管理员,this 应该可以帮助你。我希望你知道在我们启动 hbase 之前 zookeeper 应该已经启动并运行。

      【讨论】:

        【解决方案6】:

        我正在使用 sudo 命令

        hbase/bin$sudo ./start-habase.sh
        

        【讨论】:

          猜你喜欢
          • 2013-12-12
          • 2016-03-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多