2017-02-14 6 views
1

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を回復し、壊れた状態を修正したいと考えています。 また、このような問題が突然どのように発生したのか、今後どのように防止するのかをご理解いただきたいと思います。

+0

実行中のクラスタで 'dfs.datanode.data.dir'のプロパティを変更しましたか、それとも対応するディレクトリが削除されましたか? – franklinsijo

+0

すべてのブロックを削除した後で、dfs.datanode.data.dirの値を変更しました。私のhadoop.tmp.dirは/ opt/dataに設定されており、私は自分のdfs.datanode.data.dirを/ opt/data/dfs/dataに変更しました。しかし、私はブロックが壊れていることを発見した後でそれをやった。この問題は先月に2回発生しました。なぜこれが起こったのか知りたいです。 – earl

+0

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

答えて

1

ファイルシステム全体(43766ブロック)が壊れているとマークされている場合は、の値を変更すると、dfs.datanode.data.dirフォルダが完全に削除された可能性があります。これを行うときはいつも、Namenodeもフォーマットされ、再起動されていることを確認してください。

もしそうでなければ、Namenodeはまだブロック情報を保持しており、Datanode(s)の中でそれらが利用可能であると予想します。この質問に掲載されたシナリオも同様です。

データディレクトリが削除された場合、ブロックを回復することはできません。 hdfs-site.xmldfs.datanode.data.dirプロパティの値のみが変更され、Namenodeがまだフォーマットされていない場合は、hdfs-site.xmlの値を元に戻すと役立ちます。

関連する問題