Cannot obtain block length for LocatedBlock

独自空忆成欢 提交于 2019-12-12 01:33:17

当HDFS上文件在被写入时,在未关闭文件之前,写入操作异常终止,此文件就会保有openforwrite的状态。

常见场景:Flume在对HDFS进行文件写入操作时,HDFS服务终止,文件没及时关闭。

 

当MR读取该文件时,也无法使用cp或者get命令,会抛异常:Cannot obtain block length for LocatedBlock

 

解决方法

1、先定位到文件

hadoop fsck <path-of-the-directory> -openforwrite

2、释放租约(关闭文件)

hdfs debug recoverLease -path <path-of-the-file> -retries <retry times>

 

批量处理命令

hdfs fsck <path-of-the-directory> -openforwrite | grep '^\.' | grep 'OPENFORWRITE' | grep -o "/[^ ]*" | xargs -Ixarg hdfs debug recoverLease -path xarg

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!