在Hive命令行執行查詢時,出現錯誤
Error: java.io.IOException: org.apache.hadoop.hdfs.BlockMissingException: Could not obtain block: BP-787476470-192.168.152.10-1573351961380:blk_1073742171_1347 file=/user/hive/warehouse/db_hive.db/emp/emp.txt (state=,code=0)
根據信息得知是無法找到數據塊,登陸webUI監控界面,master:50070,發現只有一個DataNode slave2, slave1沒有啟動。
cd到slave1的sbin/目錄下,手動啟動DataNode,刷新監控界面,slave1的datanode已經啟動了,Hive查詢也不再報錯。
[root@slave1 sbin]# ./hadoop-daemon.sh start datanode
在HDFS中,提供了fsck命令,用於檢查HDFS上文件和目錄的健康狀態、獲取文件的block信息和位置信息等。
fsck命令必須由HDFS超級用戶來執行,普通用戶無權限。
查看文件中損壞的塊(-list-corruptfileblocks)
[root@master sbin]$ hdfs fsck / -list-corruptfileblocks
將損壞的文件移動至/lost+found目錄(-move)
[root@master sbin]$ hdfs fsck / -move
刪除損壞的文件(-delete)
[root@master sbin]$ hdfs fsck / -delete
檢查並列出所有文件狀態(-files)
[root@master sbin]$ hdfs fsck / -files
查看dfs塊的報告
[root@master sbin]$ hdfs dfsadmin -report