报错日志如下:
Caused by: org.apache.hadoop.hdfs.CannotObtainBlockLengthException: Cannot obtain block length for LocatedBlock{BP-438308737--1615993069368:blk_1073893685_152906; getBlockSize()=949; corrupt=false; offset=0; locs=[DatanodeInfoWithStorage[:9866,DS-3c8778e1-fc6a-46f8-b774-a270aa727cce,DISK], DatanodeInfoWithStorage[:9866,DS-1cbdb041-f016-4b4a-8054-2f10171f2856,DISK], DatanodeInfoWithStorage[:9866,DS-843c0421-6683-4070-a6a1-1b761ac0ad28,DISK]]}
at org.apache.hadoop.hdfs.DFSInputStream.readBlockLength(DFSInputStream.java:364)
原因分析:
上面这个报错是我在执行hive查询的时候报的错,这是一个map reduce阶段读取数据时候报错,是读取文件的一个数据块异常的问题
我这里出现这个问题是flume写数据到hdfs要注意的一个地方,因为我之前关闭了hdfs一段时间,导致flume数据到hdfs文件没有正常关闭导致的,我们需要找到这些数据块,修复他们。
解决方法:
1. 通过命令hdfs fsck /user/hive -openforwrite 检查哪些文件处于打开写的过程一直未关闭(根据自己实际要检查的目录来,如果确定是哪个目录下的话,