全部產品
Search
文件中心

E-MapReduce:寫入HDFS出現無法close檔案的異常

更新時間:Jul 01, 2024

本文介紹寫入HDFS出現無法close檔案的異常的解決方案。

具體報錯

java.io.IOException: Unable to close file because the last block xxx:xxx does not have enough number of replicas.

問題原因

一般是由於DataNode寫入負載過大引起的,資料區塊不能及時上報。

解決方案

建議按照以下方式排查解決:

說明

調大dfs.client.block.write.locateFollowingBlock.retries參數值,在節點繁忙時會延長檔案close的等待時間,正常寫入不受影響。

  • 查看HDFS配置

    查看hdfs-site.xml中dfs.client.block.write.locateFollowingBlock.retries(寫入塊後嘗試關閉的次數)參數的配置。預設為5次(30秒),推薦設定為8次(2分鐘),負載高的叢集可以視情況繼續調大。

  • 確認叢集中是否是只有少量DataNode節點,大量task節點的情況。如果大量並發提交作業,會有大量JAR檔案需要上傳,可能會導致DataNode瞬時壓力大,可以繼續調大dfs.client.block.write.locateFollowingBlock.retries參數值或者增加DataNode數量。

  • 確認叢集中是否有大量消耗DataNode的作業。例如Flink Checkpoint會大量建立和刪除小檔案,引起DataNode負載過大。此類情境可以把Flink運行在獨立的叢集上,Checkpoint會使用獨立的HDFS,或者使用OSS/OSS-HDFS Connector最佳化Checkpoint。