Starting Zookeeper Cluster. Error: Could not find or load main class org.apache.zookeeper.server.quorum.QuorumPeerMain

Starting Zookeeper Cluster. Error: Could not find or load main class org.apache.zookeeper.server.quorum.QuorumPeerMain

(我在 CentOS 5.8 上 运行ning)。我一直在按照 Clustered (Multiserver) Zookeeper Set-up 的指示进行操作,但是当我尝试启动我的服务器时出现错误。当我 运行 文档中描述的命令时:

java -cp zookeeper-3.4.6.jar:lib/log4j-1.2.16.jar:conf \ org.apache.zookeeper.server.quorum.QuorumPeerMain conf/zoo.cfg 

我收到错误:

Error: Could not find or load main class  org.apache.zookeeper.server.quorum.QuorumPeerMain

我有我的文件位置,并且 运行正在从 ~/zookeeper-3.4.6 目录:

~/zookeeper-3.4.6/zookeeper-3.4.6.jar 
~/zookeeper-3.4.6/conf/zoo.cfg
~/zookeeper-3.4.6/data/myid
~/zookeeper-3.4.6/lib/log4j-1.2.16.jar
~/zookeeper-3.4.6/bin/zkServer.sh

有谁知道为什么会出现这个错误?我不太明白传递的参数,所以我很难调试路径问题。作为旁注,我尝试了 运行ning ./zookeeper-3.4.6/bin/zkServer.sh start,它确实成功地工作,但文档似乎表明该命令适用于单节点实例。

编辑:

我能够通过修改命令并删除 :conf \ 部分来取得 一些 的进展,所以现在我 运行ning:

java -cp zookeeper-3.4.6.jar:lib/log4j-1.2.16.jar: org.apache.zookeeper.server.quorum.QuorumPeerMain conf/zoo.cfg

我收到一个新错误,但这是进步...

Exception in thread "main" java.lang.NoClassDefFoundError: org/slf4j/LoggerFacto
ry
        at org.apache.zookeeper.server.quorum.QuorumPeerMain.<clinit>(QuorumPeer
Main.java:64)
Caused by: java.lang.ClassNotFoundException: org.slf4j.LoggerFactory
        at java.net.URLClassLoader.run(URLClassLoader.java:366)
        at java.net.URLClassLoader.run(URLClassLoader.java:355)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
        ... 1 more

对应于 QuorumPeerMain 的第 63 和 64 行

public class QuorumPeerMain {
    private static final Logger LOG = LoggerFactory.getLogger(QuorumPeerMain.class);

您应该能够 运行 zkServer.sh 获得集群设置。它将使用您手动提供的相同 conf/zoo.cfg,其中将包含集群端点。

检查类路径中缺少的内容(并查看正确的 java 命令)的最佳方法是 运行 您所说的 zkServer.sh 对您有用。

启动时,检查实际使用的命令如下:

ps -ef | grep zookeeper

我得到了 Error: Could not find or load main class org.apache.zookeeper.server.quorum.QuorumPeerMain,因为我下载了 apache-zookeeper-X.X.X.tar.gz 文件而不是 apache-zookeeper-X.X.X.bin.tar.gz 文件。下载、解压并使用 bin.tar 文件为我修复了它。

您还可以从 apache-zookeeper-X.X.X.tar.gz 文件构建二进制文件;见@vincent 的

我在 Windows 上尝试 运行 Apache Zookeper v3.5.5 时也出现此错误:

Error: Could not find or load main class org.apache.zookeeper.server.quorum.QuorumPeerMain

正如@Onnonymous 所说,我通过下载 .bin.tar.gz (here) 而不是 .tar.gz 版本来解决我的问题。

我遇到了同样的错误。我通过检查 apache-zookeeper-[version] 中的 README.md 文件解决了错误。tar.gz 只需键入:

mvn clean install -DskipTests

然后启动动物园管理员。你也会解决这个错误。

当您下载并使用 apache-zookeeper-X.X.X.tar.gz 时会发生这种情况,您应该使用 apache-zookeeper-X.X.X-bin.tar.gz.这肯定会解决这个问题

这个问题可以通过解压 apache-zookeeper-3.5.6-bin.tar.gz 来解决。最初,我在 untared/installed apache-zookeeper-3.5.6.tar.gz 时遇到了同样的错误并执行了 /bin/zkServer.sh start

请确保您已下载 apache-zookeeper-3.5.6-bin.tar.gz