堆棧信息:
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