问题背景:

导致的原因:是因为2021/0913那天重启的hdfs的服务,flink实时任务还一直往hdfs里面写任务。(有些公司是因为Flume导致的)

hdfs出现Cannot obtain block length for LocatedBlockt_hdfs

所以这里的”Cannot obtain block length for LocatedBlock”结合字面意思讲应该是当前有文件处于写入状态尚未关闭,无法与对应的datanode通信来成功标识其block长度.

 

定位到了出问题的文件,是2021年09月13号的文件状态还是`openforwrite`, fsck检查结果如下:

检测代码 

hdfs fsck /group/user/tools/meta/hive-temp-table -openforwrite

hdfs出现Cannot obtain block length for LocatedBlockt_hdfs_02

解决方案,释放文件租约:

hdfs debug recoverLease -path /group/user/tools/meta/hive-temp-table/test_sony_app_action/20210913/part-0-83 -retries 3

hdfs出现Cannot obtain block length for LocatedBlockt_hdfs_03

在重新跑任务,任务正常。

参考以下文章

Cannot obtain block length for LocatedBlock故障分析和解决 - Syn良子 - 博客园 (cnblogs.com)