現象:抑制を選択した後、ファンクエリデータの一部が見つからず、エラーが報告されないことがわかりましたが、クエリがタイムアウトし、データをフェッチするときにプログラムがResultSet.next()でスタックしました。
理由:抑制は警告が報告されるのを防ぐだけであり、ブロック破損のクエリへの影響は依然として存在します。
解決策:
- 破損したブロックを表示:
hdfs fsck -list-corruptfileblocks
- 自動車修理
1)データブロックが損傷した後、DataNodeノードはディレクトリスキャン操作を実行する前に損傷を見つけることができません。
デフォルトでは6時間ごとにスキャンし、構成アイテムはdfs.datanode.directoryscan.interval:21600です。
2)DNがNNへのブロックレポートを実行するまで、データブロックは復元されません。
デフォルトでは6時間ごとに実行され、構成アイテムはdfs.blockreport.intervalMsec:21600000です。
NNがblockreportを受信すると、操作を再開します。
- 手動修理
hdfs debug recoverLease -path /blockrecover/blocktest.md -retries 10#重试10次
- Ximengで発生した手動の修復は成功しましたが、破損したブロックは引き続き検出でき、破損したブロックを直接削除できます。
hdfs fsck / -delete
- 実行後、管理インターフェースを開くと、ブロックが失われることはなく、クエリの実行に問題はありませんが、ファンは一定期間データを失う可能性があります。
- リファレンス:https : //blog.csdn.net/weixin_44131414/article/details/100016728
https://www.cnblogs.com/yinzhengjie/p/10923309.html
- その他のhdfs関連コマンド:
https://hadoop.apache.org/docs/r2.9.1/hadoop-project-dist/hadoop-hdfs/HDFSCommands.html#fsck