由于 java.lang.ClassNotFoundException:org.apache.zookeeper.server.quorum.QuorumPeerMain,zookeeper doen 开始了

zookeeper doen's get started due to java.lang.ClassNotFoundException: org.apache.zookeeper.server.quorum.QuorumPeerMain

我已经搜索过这个论坛,没有找到适合我的案例的答案:

  1. 我安装了java1.8
  2. 我从https://www.apache.org/dist/zookeeper/zookeeper-3.5.5/apache-zookeeper-3.5.5-bin.tar.gz

  3. 下载了zookeeper-3.5.5的二进制版本
  4. 我将 zoo_sample.cfg 更改为 zoo.cfg,没有对 cfg 进行任何更改

  5. 我尝试以 root 身份启动 zookeeper:

    [root@pocdnr1n1 apache-zookeeper-3.5.5-bin]# bin/zkServer.sh start conf/zoo.cfg

我在日志中收到错误:

Could not find the main class: org.apache.zookeeper.server.quorum.QuorumPeerMain.  Program will exit.

谢谢。

我想我已经找到了根本原因,张贴在这里以供未来的读者使用:

罪魁祸首是Java。

我在节点上有一个旧的 java 版本,这可以通过 运行ning java -version

来验证

在我的例子中,java 是 1.6,我所做的是重置环境以添加新的 java 1.8:

# export JAVA_HOME=/opt/jdk1.8.0_151
# export JRE_HOME=/opt/jdk1.8.0_151/jre/
# export PATH=$PATH:/opt/jdk1.8.0_151/bin:/opt/jdk1.8.0_151/jre/bin

您应该将 PATH 添加到 .bash_profile 以便它成为永久的。

现在您 运行 source .bash_profile,现在您已将 java 1.8 设置为默认值 java。同样,您可以通过 运行ning java -version

确认

运行 你的 zookeeper 将按预期启动。

这里常见的缺失是:

  1. 下载了非二进制 zookeeper
  2. java太低了(1.6不行,推荐1.8)
  3. 应设置环境以确保选择 java 1.8 作为默认版本

希望对您有所帮助。

如果您查看 3.5.5 的 ZooKeeper Administrator's Guide - Required Software,它会显示:

ZooKeeper runs in Java, release 1.7 or greater (JDK 7 or greater, FreeBSD support requires openjdk7).

这肯定了您的发现。您的 Java 版本太低。