启动 Zookeeper 集群。错误:无法找到或加载主类 org.apache.zookeeper.server.quorum.QuorumPeerMain

Posted

技术标签:

【中文标题】启动 Zookeeper 集群。错误:无法找到或加载主类 org.apache.zookeeper.server.quorum.QuorumPeerMain【英文标题】:Starting Zookeeper Cluster. Error: Could not find or load main class org.apache.zookeeper.server.quorum.QuorumPeerMain 【发布时间】:2015-04-13 14:20:38 【问题描述】:

(我在 CentOS 5.8 上运行)。我一直遵循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

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

编辑

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

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$1.run(URLClassLoader.java:366)
        at java.net.URLClassLoader$1.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);

【问题讨论】:

【参考方案1】:

我得到了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 的the answer。

【讨论】:

解决方案适用于 Windows 10 :) 谢谢。【参考方案2】:

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

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

【讨论】:

请不要在您的帖子中添加签名或礼貌文字。前者可以被视为垃圾邮件,因此会导致删除,后者在其他听起来很专业的问答网站中是不必要的噪音。【参考方案3】:

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

【讨论】:

这两个文件有什么区别? bin.tar.gz 和 tar.gz?我看到一个是 8Mb,另一个是 3 Mb【参考方案4】:

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

mvn clean install -DskipTests

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

【讨论】:

这是最好的答案。切换到“...bin.tar.gz”发行版并不是每个人的正确选择,许多其他答案都假定。 (这些答案类似于对有人问“我的车出了什么问题?”说“你应该坐出租车”) 这为我修好了!【参考方案5】:

尝试在 Windows 上运行 Apache Zookeper v3.5.5 时,我也收到此错误:

错误:无法找到或加载主类 org.apache.zookeeper.server.quorum.QuorumPeerMain

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

【讨论】:

【参考方案6】:

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

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

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

ps -ef | grep zookeeper

【讨论】:

认为你是对的。另外,我发现我使用的是过时的 zookeeper 文档。最近的还指定了一个 slf4j jar,它解决了第二次编辑中的问题

以上是关于启动 Zookeeper 集群。错误:无法找到或加载主类 org.apache.zookeeper.server.quorum.QuorumPeerMain的主要内容,如果未能解决你的问题,请参考以下文章

搭建Zookeeper集群服务启动失败

Zookeeper集群启动失败

zookeeper集群创建失败

Kafka集群搭建

zookeeper集群安装

是否可以在一台机器上以不同的端口运行多个Zookeeper实例?