hadoop 文件錯亂

一個datanode長期掛掉的後,重新運行spark程序報錯

java.io.IOException:Cannot obtain block length for LocatedBlock

解決方法:

Hadoop測試集羣運行job的過程中發現部分運行失敗,有Cannotobtain block length for LocatedBlock,使用hdfs dfs -cat${文件}的時候也報這個錯,看過代碼後發現是文件未被正常關閉(flume傳到hdfs上的,可能由於Namenode長時間gc或者切換或者重啓會留下很多.tmp結尾的文件),爲此,使用hadoop命令顯示處於打開狀態的文件,然後刪除這些文件:

hadoop fsck /-openforwrite | egrep -v '^\.+$' | egrep "MISSING|OPENFORWRITE" |grep -o "/[^ ]*" | sed -e "s/:$//" | xargs -i hadoop fs-rmr {};

然後重傳這些文件到hdfs。

發佈了39 篇原創文章 · 獲贊 2 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章