动物园管理员没有启动
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 start
或zkServer
。它现在应该可以工作了。
解释:
在 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" ""
结论:只需删除多余的占位符%*
【讨论】:
以上是关于动物园管理员没有启动的主要内容,如果未能解决你的问题,请参考以下文章