启动 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的主要内容,如果未能解决你的问题,请参考以下文章