サーバーがクラッシュした後に発生した次のエラーから回復するにはどうすればよいですか? Zookeeperが起動せず、次のメッセージがログに繰り返し表示されます。
2017-05-27 01:02:08,072 [myid:] - INFO [main:Environment@100] - Server environment:Java.library.path=/usr/Java/packages/lib/AMD64:/usr/lib64:/lib64:/lib:/usr/lib
2017-05-27 01:02:08,072 [myid:] - INFO [main:Environment@100] - Server environment:Java.io.tmpdir=/tmp
2017-05-27 01:02:08,072 [myid:] - INFO [main:Environment@100] - Server environment:Java.compiler=<NA>
2017-05-27 01:02:08,072 [myid:] - INFO [main:Environment@100] - Server environment:os.name=Linux
2017-05-27 01:02:08,072 [myid:] - INFO [main:Environment@100] - Server environment:os.Arch=AMD64
2017-05-27 01:02:08,073 [myid:] - INFO [main:Environment@100] - Server environment:os.version=3.10.0-514.16.1.el7.x86_64
2017-05-27 01:02:08,073 [myid:] - INFO [main:Environment@100] - Server environment:user.name=zookeeper
2017-05-27 01:02:08,073 [myid:] - INFO [main:Environment@100] - Server environment:user.home=/opt/zookeeper
2017-05-27 01:02:08,073 [myid:] - INFO [main:Environment@100] - Server environment:user.dir=/
2017-05-27 01:02:08,074 [myid:] - INFO [main:ZooKeeperServer@829] - tickTime set to 2000
2017-05-27 01:02:08,074 [myid:] - INFO [main:ZooKeeperServer@838] - minSessionTimeout set to -1
2017-05-27 01:02:08,074 [myid:] - INFO [main:ZooKeeperServer@847] - maxSessionTimeout set to -1
2017-05-27 01:02:08,080 [myid:] - INFO [main:NIOServerCnxnFactory@89] - binding to port 0.0.0.0/0.0.0.0:2181
2017-05-27 01:02:08,385 [myid:] - ERROR [main:Util@239] - Last transaction was partial.
2017-05-27 01:02:08,400 [myid:] - ERROR [main:Util@239] - Last transaction was partial.
2017-05-27 01:02:08,403 [myid:] - ERROR [main:Util@239] - Last transaction was partial.
2017-05-27 01:02:08,403 [myid:] - ERROR [main:Util@239] - Last transaction was partial.
2017-05-27 01:02:08,404 [myid:] - ERROR [main:Util@239] - Last transaction was partial.
2017-05-27 01:02:08,404 [myid:] - ERROR [main:ZooKeeperServerMain@64] - Unexpected exception, exiting abnormally
Java.io.EOFException
at Java.io.DataInputStream.readInt(DataInputStream.Java:392)
at org.Apache.jute.BinaryInputArchive.readInt(BinaryInputArchive.Java:63)
at org.Apache.zookeeper.server.persistence.FileHeader.deserialize(FileHeader.Java:64)
at org.Apache.zookeeper.server.persistence.FileTxnLog$FileTxnIterator.inStreamCreated(FileTxnLog.Java:585)
at org.Apache.zookeeper.server.persistence.FileTxnLog$FileTxnIterator.createInputArchive(FileTxnLog.Java:604)
at org.Apache.zookeeper.server.persistence.FileTxnLog$FileTxnIterator.goToNextLog(FileTxnLog.Java:570)
at org.Apache.zookeeper.server.persistence.FileTxnLog$FileTxnIterator.next(FileTxnLog.Java:652)
at org.Apache.zookeeper.server.persistence.FileTxnSnapLog.restore(FileTxnSnapLog.Java:166)
at org.Apache.zookeeper.server.ZKDatabase.loadDataBase(ZKDatabase.Java:223)
at org.Apache.zookeeper.server.ZooKeeperServer.loadData(ZooKeeperServer.Java:283)
at org.Apache.zookeeper.server.ZooKeeperServer.startdata(ZooKeeperServer.Java:410)
at org.Apache.zookeeper.server.NIOServerCnxnFactory.startup(NIOServerCnxnFactory.Java:118)
at org.Apache.zookeeper.server.ZooKeeperServerMain.runFromConfig(ZooKeeperServerMain.Java:119)
at org.Apache.zookeeper.server.ZooKeeperServerMain.initializeAndRun(ZooKeeperServerMain.Java:87)
at org.Apache.zookeeper.server.ZooKeeperServerMain.main(ZooKeeperServerMain.Java:53)
at org.Apache.zookeeper.server.quorum.QuorumPeerMain.initializeAndRun(QuorumPeerMain.Java:116)
at org.Apache.zookeeper.server.quorum.QuorumPeerMain.main(QuorumPeerMain.Java:78)
iPVPに感謝
既知のApache ZooKeeperバグに遭遇したようです。これに関連するいくつかの異なるApache JIRA問題があります: ZOOKEEPER-1621 および ZOOKEEPER-2332 。根本原因の分析といくつかの潜在的な修正案に興味がある場合は、これらの問題のコメントを参照してください。
残念ながら、現時点ではバグの修正を含むApache ZooKeeperリリースはありません。あなたが試すことができるいくつかの潜在的な回避策があります:
私にとっての解決策は、/ hadoop/zookeeper/version-2(またはdataDirがどこにあるかにかかわらず)で長さ0のログファイルを見つけて削除することでした。その後ZooKeeperを起動します。
私の解決策はlastログファイル(0バイト長)を見つけることでした。
これはversion-2
ディレクトリ内にあります
ls -l -r --sort=time
-rw-r--r-- 1 chris chris 67108880 Jan 24 10:37 log.23c6a70
-rw-r--r-- 1 chris chris 0 Jan 24 10:37 log.23d3fb4
私は最初にスナップショットと同様に機能している最後の2つのログファイルを削除しようとしましたが、「少し」古いバージョンになります。
-rw-r--r-- 1 chris chris 3685904 Jan 24 00:56 snapshot.23c6a6e
安全のために、最後のスナップショットファイルと最後のログファイルを一緒に削除し、長さが0のログファイルを削除する必要があるかもしれません。
ところで。ログファイルとスナップショットは一致する必要がある同じHEXパターンを持っています
ログ.23c6a 70
スナップショット.23c6a 6e
それらは一致し、一貫している必要があり、この問題を修正する必要があります。