AWS EC2インスタンスにオープンソースのhadoopバージョン2.7.3クラスタ(2マスター+ 3スレーブ)がインストールされています。私はクラスタをKafka Connectと統合するためにクラスタを使用しています。HDFS fsckコマンドが '/'の状態を破損として表示します
先月クラスタの設定を行い、最後の2週間にカフカ接続の設定が完了しました。それ以来、私たちはHDFSでカフカのトピックレコードを操作し、さまざまな操作を行うことができました。
昨日以降、私はエラーが発生し始めました。私は地元からのクラスタに新しいファイルをコピーすると、それが来て、開かれたが、いくつかの時間後、再び同様のIOExceptionが示す開始します:
17/02/14 07:57:55 INFO hdfs.DFSClient: No node available for BP-1831277630-10.16.37.124-1484306078618:blk_1073793876_55013 file=/test/inputdata/derby.log
17/02/14 07:57:55 INFO hdfs.DFSClient: Could not obtain BP-1831277630-10.16.37.124-1484306078618:blk_1073793876_55013 from any node: java.io.IOException: No live nodes contain block BP-1831277630-10.16.37.124-1484306078618:blk_1073793876_55013 after checking nodes = [], ignoredNodes = null No live nodes contain current block Block locations: Dead nodes: . Will get new block locations from namenode and retry...
17/02/14 07:57:55 WARN hdfs.DFSClient: DFS chooseDataNode: got # 1 IOException, will wait for 499.3472970548959 msec.
17/02/14 07:57:55 INFO hdfs.DFSClient: No node available for BP-1831277630-10.16.37.124-1484306078618:blk_1073793876_55013 file=/test/inputdata/derby.log
17/02/14 07:57:55 INFO hdfs.DFSClient: Could not obtain BP-1831277630-10.16.37.124-1484306078618:blk_1073793876_55013 from any node: java.io.IOException: No live nodes contain block BP-1831277630-10.16.37.124-1484306078618:blk_1073793876_55013 after checking nodes = [], ignoredNodes = null No live nodes contain current block Block locations: Dead nodes: . Will get new block locations from namenode and retry...
17/02/14 07:57:55 WARN hdfs.DFSClient: DFS chooseDataNode: got # 2 IOException, will wait for 4988.873277172643 msec.
17/02/14 07:58:00 INFO hdfs.DFSClient: No node available for BP-1831277630-10.16.37.124-1484306078618:blk_1073793876_55013 file=/test/inputdata/derby.log
17/02/14 07:58:00 INFO hdfs.DFSClient: Could not obtain BP-1831277630-10.16.37.124-1484306078618:blk_1073793876_55013 from any node: java.io.IOException: No live nodes contain block BP-1831277630-10.16.37.124-1484306078618:blk_1073793876_55013 after checking nodes = [], ignoredNodes = null No live nodes contain current block Block locations: Dead nodes: . Will get new block locations from namenode and retry...
17/02/14 07:58:00 WARN hdfs.DFSClient: DFS chooseDataNode: got # 3 IOException, will wait for 8598.311122824263 msec.
17/02/14 07:58:09 WARN hdfs.DFSClient: Could not obtain block: BP-1831277630-10.16.37.124-1484306078618:blk_1073793876_55013 file=/test/inputdata/derby.log No live nodes contain current block Block locations: Dead nodes: . Throwing a BlockMissingException
17/02/14 07:58:09 WARN hdfs.DFSClient: Could not obtain block: BP-1831277630-10.16.37.124-1484306078618:blk_1073793876_55013 file=/test/inputdata/derby.log No live nodes contain current block Block locations: Dead nodes: . Throwing a BlockMissingException
17/02/14 07:58:09 WARN hdfs.DFSClient: DFS Read
org.apache.hadoop.hdfs.BlockMissingException: Could not obtain block: BP-1831277630-10.16.37.124-1484306078618:blk_1073793876_55013 file=/test/inputdata/derby.log
at org.apache.hadoop.hdfs.DFSInputStream.chooseDataNode(DFSInputStream.java:983)
at org.apache.hadoop.hdfs.DFSInputStream.blockSeekTo(DFSInputStream.java:642)
at org.apache.hadoop.hdfs.DFSInputStream.readWithStrategy(DFSInputStream.java:882)
at org.apache.hadoop.hdfs.DFSInputStream.read(DFSInputStream.java:934)
at java.io.DataInputStream.read(DataInputStream.java:100)
at org.apache.hadoop.io.IOUtils.copyBytes(IOUtils.java:85)
at org.apache.hadoop.io.IOUtils.copyBytes(IOUtils.java:59)
at org.apache.hadoop.io.IOUtils.copyBytes(IOUtils.java:119)
at org.apache.hadoop.fs.shell.Display$Cat.printToStdout(Display.java:107)
at org.apache.hadoop.fs.shell.Display$Cat.processPath(Display.java:102)
at org.apache.hadoop.fs.shell.Command.processPaths(Command.java:317)
at org.apache.hadoop.fs.shell.Command.processPathArgument(Command.java:289)
at org.apache.hadoop.fs.shell.Command.processArgument(Command.java:271)
at org.apache.hadoop.fs.shell.Command.processArguments(Command.java:255)
at org.apache.hadoop.fs.shell.Command.processRawArguments(Command.java:201)
at org.apache.hadoop.fs.shell.Command.run(Command.java:165)
at org.apache.hadoop.fs.FsShell.run(FsShell.java:287)
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:84)
at org.apache.hadoop.fs.FsShell.main(FsShell.java:340)
cat: Could not obtain block: BP-1831277630-10.16.37.124-1484306078618:blk_1073793876_55013 file=/test/inputdata/derby.log
私がないとき:HDFSは/をfsckが、私が手:
Total size: 667782677 B
Total dirs: 406
Total files: 44485
Total symlinks: 0
Total blocks (validated): 43767 (avg. block size 15257 B)
********************************
UNDER MIN REPL'D BLOCKS: 43766 (99.99772 %)
dfs.namenode.replication.min: 1
CORRUPT FILES: 43766
MISSING BLOCKS: 43766
MISSING SIZE: 667781648 B
CORRUPT BLOCKS: 43766
********************************
Minimally replicated blocks: 1 (0.0022848265 %)
Over-replicated blocks: 0 (0.0 %)
Under-replicated blocks: 0 (0.0 %)
Mis-replicated blocks: 0 (0.0 %)
Default replication factor: 3
Average block replication: 6.8544796E-5
Corrupt blocks: 43766
Missing replicas: 0 (0.0 %)
Number of data-nodes: 3
Number of racks: 1
FSCK ended at Tue Feb 14 07:59:10 UTC 2017 in 932 milliseconds
The filesystem under path '/' is CORRUPT
つまり、すべてのファイルが何とか壊れています。
私は自分のHDFSを回復し、壊れた状態を修正したいと考えています。 また、このような問題が突然どのように発生したのか、今後どのように防止するのかをご理解いただきたいと思います。
実行中のクラスタで 'dfs.datanode.data.dir'のプロパティを変更しましたか、それとも対応するディレクトリが削除されましたか? – franklinsijo
すべてのブロックを削除した後で、dfs.datanode.data.dirの値を変更しました。私のhadoop.tmp.dirは/ opt/dataに設定されており、私は自分のdfs.datanode.data.dirを/ opt/data/dfs/dataに変更しました。しかし、私はブロックが壊れていることを発見した後でそれをやった。この問題は先月に2回発生しました。なぜこれが起こったのか知りたいです。 – earl
hdfsブロックスキャンを防止するために、 - dfs.datanode.scan.period.hoursとdfs.block.scanner.volume.bytes.per.secondのプロパティを変更する必要があります。私はhdfsブロックスキャンを防ぐために、dfs.datanode.scan.period.hoursを-1に、dfs.block.scanner.volume.bytes.per.secondを0に設定しました。しかし、私はこれが私を助けようとしているのかどうかはわかりません。このリンクでは、デフォルトでdfs.datanode.scan.period.hoursは504時間または3週間に設定されています。つまり、504時間後にhdfsブロックスキャンが行われます。私は最後の腐敗のブロックがおよそ3週間前だったことを覚えています。そこで私はこれらの値を修正しました。 – earl