最後一個 block 沒有足夠的副本數,文件關閉失敗

堆棧信息:

java.io.IOException: Unable to close file because the last block does not have enough number of replicas.  
    at org.apache.hadoop.hdfs.DFSOutputStream.completeFile(DFSOutputStream.java:2528)
    at org.apache.hadoop.hdfs.DFSOutputStream.closeImpl(DFSOutputStream.java:2495)
    at org.apache.hadoop.hdfs.DFSOutputStream.close(DFSOutputStream.java:2458)
    at org.apache.hadoop.fs.FSDataOutputStream$PositionCache.close(FSDataOutputStream.java:72)
    at org.apache.hadoop.fs.FSDataOutputStream.close(FSDataOutputStream.java:106)

解決辦法:

NameNode 收到 HDFS 客戶端關閉文件請求之後,會檢查最後一個 block 的完成狀態,只有當足夠的 DataNode 上報 block 完成纔可關閉文件。

網絡 IO 延遲和 GC 等原因都將導致 DataNode 延遲上報。

HDFS 客戶端會多次嘗試關閉文件,通過增加重試次數可減少該問題。編輯文件 hdfs-core.xml 文件,修改 dfs.client.block.write.locateFollowingBlock.retries 屬性,默認爲 5

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章