28

我正在与动物园管理员(http://zookeeper.apache.org/)合作。下载 3.3.5 并创建 zoo.cfg 并放在 $ZOOKEEPER/conf 中,使用 zkServer start 启动 zookeeper。但以下是错误

任何人都可以在这里帮助我..

 nfig or no quorum defined in config, running  in standalone mode
 2012-08-01 23:20:32,175 [myid:] - ERROR [main:ZooKeeperServerMain@54] - Invalid
 arguments, exiting abnormally
 java.lang.NumberFormatException: For input string: "C:\Development\apps\zookeeper\zookeeper3.4.1\bin\..\conf\zoo.cfg"
        at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
        at java.lang.Integer.parseInt(Integer.java:449)
        at java.lang.Integer.parseInt(Integer.java:499)
        at org.apache.zookeeper.server.ServerConfig.parse(ServerConfig.java:60)
        at org.apache.zookeeper.server.ZooKeeperServerMain.initializeAndRun(ZooKeeperServerMain.java:83)
        at org.apache.zookeeper.server.ZooKeeperServerMain.main(ZooKeeperServerMain.java:52)
        at org.apache.zookeeper.server.quorum.QuorumPeerMain.initializeAndRun(QuorumPeerMain.java:116)
        at org.apache.zookeeper.server.quorum.QuorumPeerMain.main(QuorumPeerMain.java:78)
 2012-08-01 23:20:32,177 [myid:] - INFO  [main:ZooKeeperServerMain@55] - Usage: Z
 ooKeeperServerMain configfile | port datadir [ticktime] [maxcnxns]
 Usage: ZooKeeperServerMain configfile | port datadir [ticktime] [maxcnxns]
4

5 回答 5

88

只需省略“start”参数,而是调用“bin\zkServer”。

于 2012-08-23T13:38:38.870 回答
4

在 zoo.cfg 文件中转到 dataDir=/usr/zookeeper/ data

数据文件夹中创建一个名为 myid 的文件并写入 1. 保存文件并启动 zkServer

如果您正在运行多个实例,则对于每个实例,您需要在数据文件夹中创建 myid 文件并分别使用 1、2、3 写入。实际上这用于节点领导者选举。

于 2018-07-17T05:38:08.967 回答
2

java.lang.NumberFormatException:对于输入字符串:“C:\Development\apps\zookeeper\zookeeper3.4.1\bin..\conf\zoo.cfg”

看来您使用“start”和 zoo.cfg 文件的位置运行 zkServer,即“C:\Development\apps\zookeeper\zookeeper3.4.1\bin..\conf\zoo.cfg”,以及另一个参数,最多添加3个参数:

./zkServer start C:\Development\apps\zookeeper\zookeeper3.4.1\bin..\conf\zoo.cfg xxx

所以,这个问题可以通过简单地删除第二个和第三个参数来解决,这使得命令:

./zkServer 启动

这背后的原因是因为 zkServer 用于初始化 zookeeper 系统的类(QuorumPeerMain,ZooKeeperServerMain)接受各种数量的参数并相应地运行。当你给 zkServer 提供两个参数时,这两个参数背后的含义应该是 port 和 datadir。是的,端口应该是一个数字,你的炸弹来了。

顺便说一句,当您在没有任何参数的情况下执行引导脚本时,它们会附带帮助说明。

于 2013-03-22T09:18:24.603 回答
2

打开zkServer.cmd,找到这一行

call %JAVA% "-Dzookeeper.log.dir=%ZOO_LOG_DIR%" "-Dzookeeper.root.logger=%ZOO_LOG4J_PROP%" "-Dzookeeper.log.file=%ZOO_LOG_FILE%" "-XX:+HeapDumpOnOutOfMemoryError" "-XX:OnOutOfMemoryError=cmd /c taskkill /pid %%%%p /t /f" -cp "%CLASSPATH%" %ZOOMAIN% "%ZOOCFG%" %*

并删除%*行尾的。新的开始 cmd 行应该是:

call %JAVA% "-Dzookeeper.log.dir=%ZOO_LOG_DIR%" "-Dzookeeper.root.logger=%ZOO_LOG4J_PROP%" "-Dzookeeper.log.file=%ZOO_LOG_FILE%" "-XX:+HeapDumpOnOutOfMemoryError" "-XX:OnOutOfMemoryError=cmd /c taskkill /pid %%%%p /t /f" -cp "%CLASSPATH%" %ZOOMAIN% "%ZOOCFG%"

然后运行zkServer startzkServer。它现在应该可以工作了。


解释:

在 ZkServer 源代码中。ZooKeeperServerMain.java

protected void initializeAndRun(String[] args) throws ConfigException, IOException, AdminServerException {
    try {
        ManagedUtil.registerLog4jMBeans();
    } catch (JMException e) {
        LOG.warn("Unable to register log4j JMX control", e);
    }

    ServerConfig config = new ServerConfig();
    if (args.length == 1) {
        config.parse(args[0]);
    } else {
        config.parse(args);
    }

    runFromConfig(config);
}

不同的参数长度有不同的解析方法。

如果有一个参数,它将作为配置文件路径。

在多个参数的情况下,有一个固定的顺序。

1st arg(must): server port.
2nd arg(must): dataDir
3rd arg(optional): tickTime
4th arg(optional): maxClientCnxns

回到 zkServer.cmd,参数位置有两个占位符。

%ZOOMAIN% "%ZOOCFG%" %*

我相信开发人员希望为%*.

然而,对于大多数 zk 用户来说。它们用于zkServer start启动服务器。

最后, cmd 原来是:

org.apache.zookeeper.server.quorum.QuorumPeerMain "C:\Users\...\scoop\apps\zookeeper\current\bin\..\conf\zoo.cfg" "start"

使用了两个参数。第一个参数,这里的配置路径,作为端口号。然后我们有例外。

更多,zkServer直接使用启动zooKeeper怎么样?

就我而言,我面临着同样的问题。虽然我们没有任何争论。zkServer.cmd 仍然将一个空字符串传递给 main 方法。像这样:

org.apache.zookeeper.server.quorum.QuorumPeerMain "C:\Users\...\scoop\apps\zookeeper\current\bin\..\conf\zoo.cfg" ""

结论:只需删除多余的占位符%*

于 2020-05-20T04:16:51.657 回答
0
sudo ./zkServer.sh start
[sudo] password for administrator:
/bin/java
ZooKeeper JMX enabled by default
Using config: apache-zookeeper-3.5.5/bin/../conf/zoo.cfg
Starting zookeeper ... FAILED TO START

解决方案是:download bin.tar file "apache-zookeeper-3.5.5-bin.tar.gz "我错误地下载了一个 tar 文件,

于 2020-05-12T11:27:03.690 回答