动物园管理员没有启动

Posted

技术标签:

【中文标题】动物园管理员没有启动【英文标题】:zookeeper not starting 【发布时间】:2012-07-30 16:33:04 【问题描述】:

我正在使用 zookeeper (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]

【问题讨论】:

尝试使用“start-foreground”启动服务器以查看问题的完整日志 【参考方案1】:

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

【讨论】:

接受的答案? - 我在 zk 3.4.5 中运行 zkServer start 时遇到了同样的错误,在没有启动的情况下运行修复了它 如果我们想在一个 Windows 上运行多个 zk 节点怎么办。如果我们不能指定 CLI 参数,我们如何启动第二个 zk 节点? “zkServer start zoo1.cfg”会不会再次失败? 这个bug与windows脚本有关;看到这些问题:issues.apache.org/jira/browse/…【参考方案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。是的,端口应该是一个数字,然后你的炸弹就来了。

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

【讨论】:

不! “zkServer start”会报错,应该是这样!大多数开源东西在 Unix 上是可以的,但在 Windows 上是错误的。【参考方案3】:

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

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

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

【讨论】:

【参考方案4】:
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文件,

【讨论】:

解决方法是:下载bin.tar文件“apache-zookeeper-3.5.5-bin.tar.gz”我误下载了一个tar文件 请将建议的解决方案放在答案中,而不是在此评论中【参考方案5】:

打开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" ""

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

【讨论】:

以上是关于动物园管理员没有启动的主要内容,如果未能解决你的问题,请参考以下文章

卡夫卡动物园管理员的目的

Apache Storm Supervisor 自动停止

动物园管理员——ZooKeeper

Debezium Kafka Connect 需要重新启动才能使 PostgreSQL cdc 工作

涂鸦智慧园区管理|实时“豹”警,管理漏洞止于伊始

sh 动物园管理员