【问题标题】:ZooKeeper exists failed after 3 retriesZooKeeper 存在 3 次重试后失败
【发布时间】:2013-12-12 21:27:55
【问题描述】:

我在伪分布式模式下运行 Hadoop-1.2.1 和 HBase-0.94.11。

由于电源故障,Hadoop 和 HBase 设置出现故障。下次我重新启动机器并设置伪分布时,HBase 停止工作,并在 HBase shell 上出现以下错误:

13/11/27 13:53:27 ERROR zookeeper.RecoverableZooKeeper: ZooKeeper exists failed after 3 retries
13/11/27 13:53:27 WARN zookeeper.ZKUtil: hconnection 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: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.ClusterId.readClusterIdZNode(ClusterId.java:61)
    at org.apache.hadoop.hbase.zookeeper.ClusterId.getId(ClusterId.java:50)
    at org.apache.hadoop.hbase.zookeeper.ClusterId.hasId(ClusterId.java:44)
    at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.ensureZookeeperTrackers(HConnectionManager.java:720)
    at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.getMaster(HConnectionManager.java:789)
    at org.apache.hadoop.hbase.client.HBaseAdmin.<init>(HBaseAdmin.java:129)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:526)

以下是流程:

hduser@user-ubuntu:~$ jps
16914 NameNode
19955 Jps
29460 Main
17728 TaskTracker
19776 HMaster
17490 JobTracker
17392 SecondaryNameNode

【问题讨论】:

    标签: hadoop hbase apache-zookeeper


    【解决方案1】:

    您确定您的 Zookeeper 进程正在运行(您的 jps 列表未显示 QuorumPeerMain 的条目)吗? jps 堆栈可能不会显示所有正在运行的 java 进程 - 尝试使用 ps axww | grep QuorumPeerMain

    如果您的 zookeeper 拒绝启动,请检查其日志以查看是否有一些堆栈跟踪线索

    【讨论】:

    • 我运行了命令,下面是输出:hduser@user-ubuntu:~$ ps axww | grep QuorumPeerMain 15527 pts/2 S+ 0:00 grep --color=auto QuorumPeerMain
    • 所以 zookeeper 没有运行(grep 匹配的是 grep cmd 本身) - 我建议你停止集群服务,启动 zookeeper,剩余的 hadoop 和 hbase 服务
    • 如何再次重启Zookeeper
    【解决方案2】:

    很简单,zookeeper quorum 进程没有运行 - 如果已经运行,那么就会有另一个 java 进程:

    hduser@user-ubuntu:~$ jps
    16914 NameNode
    19955 Jps
    29460 Main
    17728 TaskTracker
    19776 HMaster
    17490 JobTracker
    17392 SecondaryNameNode
    

    xxxxx HQuorumPeer

    Zookeeper 是 HBase 集群所必需的 - 因为它管理它。


    可能的解决方案: 默认情况下,HBase 管理 zookeeper 本身,即启动和停止 zookeeper quorum(zookeeper 节点集群) - 验证设置查看文件 conf/hbase-evn.sh(在您的 hbase 目录中)必须有一行:

    export HBASE_MANAGES_ZK=true
    

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

    同时验证 conf/hbase-site.xml 的 HBase conf,

    适用于伪分布式模式的最低配置是:

    <configuration>
    <property>
      <name>hbase.cluster.distributed</name>
      <value>true</value>
    </property>
    <property>
        <name>hbase.rootdir</name>
       <value>hdfs://localhost:9000/hbase</value>   
      </property>
      <property>
        <name>hbase.zookeeper.property.dataDir</name>
        <value>/home/<yourusername>/zookeeper</value>
      </property>
    </configuration>
    

    现在停止 HBase,如果它一直在运行:

    $ ./bin/stop-hbase.sh
    

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

    $ ./bin/start-hbase.sh
    

    您可能会觉得有帮助的答案:12

    【讨论】:

      猜你喜欢
      • 2015-10-18
      • 1970-01-01
      • 2020-07-03
      • 2016-03-08
      • 1970-01-01
      • 2015-09-05
      • 2022-07-30
      • 2015-10-31
      • 1970-01-01
      相关资源
      最近更新 更多