在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

01-08 03:41