すべてのプロダクト
Search
ドキュメントセンター

E-MapReduce:HDFSへのデータ書き込み中にファイルが閉じられない場合の対処方法

最終更新日:Jan 11, 2025

このトピックでは、Hadoop Distributed File System (HDFS) にデータを書き込んでいるときにファイルが閉じられない問題のトラブルシューティング方法について説明します。

エラーメッセージ

java.io.IOException: Unable to close file because the last block xxx:xxx does not have enough number of replicas. // 最後のブロックxxx:xxxに十分な数のレプリカがないため、ファイルを閉じることができません。

原因

ほとんどの場合、これはDataNodeの書き込み負荷が高いため、データブロックをできるだけ早く報告できないことが原因です。

解決策

問題を解決するには、次の手順を参照することをお勧めします。

説明

dfs.client.block.write.locateFollowingBlock.retries パラメーターの値を大きくすると、ノードがビジー状態のときにシステムがファイルを閉じるまでの待機時間が長くなり、データの書き込みには影響しません。

  • HDFS サービスの設定を表示する

    dfs.client.block.write.locateFollowingBlock.retries パラメーターの値を hdfs-site.xml タブで確認します。このパラメーターは、データがデータブロックに書き込まれた後にファイルを閉じる再試行回数を指定します。デフォルトでは、システムは 30 秒以内に 5 回ファイルを閉じようとします。このパラメーターを 8 に設定することをお勧めします。これは、システムが 2 分以内に 8 回ファイルを閉じようと試みることを示します。負荷の高いクラスターの場合は、このパラメーターの値を大きくすることができます。

  • クラスターのDataNodeの数が少なく、タスクノードの数が多いかどうかを確認します。多数のジョブが同時に送信されると、多数のJARファイルをアップロードする必要があり、DataNodeに大きな負荷がかかる可能性があります。この場合、dfs.client.block.write.locateFollowingBlock.retries パラメーターの値を大きくするか、DataNodeの数を増やすことができます。

  • DataNodeで大量のリソースを消費するジョブがクラスターに存在するかどうかを確認します。たとえば、Flinkのチェックポイントは多数の小さなファイルを作成および削除するため、DataNodeに大きな負荷がかかります。このようなシナリオでは、Flinkを独立したクラスターで実行できます。これを行うには、チェックポイントは独立したHDFSクラスターを使用します。また、Object Storage Service (OSS) または OSS-HDFS Connector を使用してチェックポイントを最適化することもできます。