概述
解决Zookeeper报错
问题描述
2019-12-09 23:18:41,425 INFO org.apache.zookeeper.server.quorum.QuorumPeerConfig: Reading configuration from: /var/run/cloudera-scm-agent/process/604-zookeeper-server/zoo.cfg
2019-12-09 23:18:41,446 INFO org.apache.zookeeper.server.quorum.QuorumPeerConfig: Defaulting to majority quorums
2019-12-09 23:18:41,453 INFO org.apache.zookeeper.server.DatadirCleanupManager: autopurge.snapRetainCount set to 5
2019-12-09 23:18:41,453 INFO org.apache.zookeeper.server.DatadirCleanupManager: autopurge.purgeInterval set to 24
2019-12-09 23:18:41,454 INFO org.apache.zookeeper.server.DatadirCleanupManager: Purge task started.
2019-12-09 23:18:41,460 ERROR org.apache.zookeeper.server.DatadirCleanupManager: Error occured while purging.
org.apache.zookeeper.server.persistence.FileTxnSnapLog$DatadirException: Missing snap directory /data/zookeeper/data/version-2, automatic data directory creation is disabled (zookeeper.datadir.autocreate is false). Please create this directory manually.
at org.apache.zookeeper.server.persistence.FileTxnSnapLog.<init>(FileTxnSnapLog.java:122)
at org.apache.zookeeper.server.PurgeTxnLog.purge(PurgeTxnLog.java:68)
at org.apache.zookeeper.server.DatadirCleanupManager$PurgeTask.run(DatadirCleanupManager.java:140)
at java.util.TimerThread.mainLoop(Timer.java:555)
at java.util.TimerThread.run(Timer.java:505)
2019-12-09 23:18:41,474 INFO org.apache.zookeeper.server.DatadirCleanupManager: Purge task completed.
2019-12-09 23:18:41,483 INFO org.apache.zookeeper.server.quorum.QuorumPeerMain: Starting quorum peer
2019-12-09 23:18:41,497 INFO org.apache.zookeeper.server.NIOServerCnxnFactory: binding to port 0.0.0.0/0.0.0.0:2181
2019-12-09 23:18:41,512 ERROR org.apache.zookeeper.server.quorum.QuorumPeerMain: Unable to access datadir, exiting abnormally
org.apache.zookeeper.server.persistence.FileTxnSnapLog$DatadirException: Missing snap directory /data/zookeeper/data/version-2, automatic data directory creation is disabled (zookeeper.datadir.autocreate is false). Please create this directory manually.
at org.apache.zookeeper.server.persistence.FileTxnSnapLog.<init>(FileTxnSnapLog.java:122)
at org.apache.zookeeper.server.quorum.QuorumPeer.<init>(QuorumPeer.java:490)
at org.apache.zookeeper.server.quorum.QuorumPeerMain.runFromConfig(QuorumPeerMain.java:138)
at org.apache.zookeeper.server.quorum.QuorumPeerMain.initializeAndRun(QuorumPeerMain.java:116)
at org.apache.zookeeper.server.quorum.QuorumPeerMain.main(QuorumPeerMain.java:79)
如日志所说,在执行清除文件的时候,Zookeeper发现当前节点上缺少snap directory
(临时目录),即缺少/data/zookeeper/data/version-2
,并且在Zookeeper尝试自动创建此目录时也失败了 ( zookeeper.datadir.autocreate 是flase) ,最终导致了exiting abnormally
(异常退出)。
Zookeeper需要你手动创建此文件夹
问题解决
上面的日志,换句话说就是,既没有version-2
目录,又被设置为不能自动创建
。那么,我们便可以有以下两种方法:
-
方法一:以Zookeeper的角色,手动创建目录
version-2
,再重启此节点上的Zookeeper,配置不变。如下:
yeluo@slave2:~$sudo -u zoopeeper mkdir /data/zookeeper/data/version-2
这里以123.*
为例说明下,之所以使用sudo -u zoopeeper
,是要让文件夹的归属者和创建者均是zookeeper
。
(如果你不是使用sudo -u zoopeeper切换到zookeeper去创建,那么文件夹的归属是root,后面写数据可能出现权限问题。如果觉得麻烦,那么可以直接采用方法二)。 -
方法二:设置自动创建目录
version-2
,然后重启此结点的Zookeeper Server
即可如下:
勾选Enable auto-creation of data directories
。