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

E-MapReduce:HDFSへのデータ書き込み時に「DataXceiver Premature EOF from inputStream」エラーが発生した場合の対処方法

最終更新日:Jan 11, 2025

このトピックでは、Hadoop Distributed File System(HDFS)にデータを書き込むときに「DataXceiver Premature EOF from inputStream」エラーのトラブルシューティングを行う方法について説明します。

エラーメッセージ

DataXceiver error processing WRITE_BLOCK operation src: /10.*.*.*:35692 dst: /10.*.*.*:50010 java.io.IOException: Premature EOF from inputStream

原因

HDFSに継続的に新しいデータを書き込むために、ジョブでは複数のHDFSデータ書き込みストリームが有効になっています。ただし、HDFSに同時に書き込むことができるファイルの数は、DataNodeの特定のパラメーターによって制限されています。制限を超えると、「DataXceiver Premature EOF from inputStream」エラーが発生します。

解決策

DataNodeのログを表示します。詳細については、「HDFSサービスログ」をご参照ください。ほとんどの場合、次のエラーメッセージが返されます。
// DataNode で同時に処理できる xciever の数を超えました
java.io.IOException: Xceiver count 4097 exceeds the limit of concurrent xcievers: 4096
at org.apache.hadoop.hdfs.server.datanode.DataXceiverServer.run(DataXceiverServer.java:150)
エラーが発生した場合は、次の方法を使用してエラーをトラブルシューティングできます。
  1. 上部のナビゲーションバーで、クラスターが存在するリージョンを選択し、ビジネス要件に基づいてリソースグループを選択します
  2. HDFSの [構成] タブに移動します。
    1. [ECS上のEMR] ページで、管理するクラスターを見つけ、[アクション] 列の [サービス] をクリックします。
    2. 表示されるページで、[構成] タブをクリックします。
  3. dfs.datanode.max.transfer.threads パラメーターを検索し、パラメーターの値を適切に増やします。ほとんどの場合、値を2倍にすることをお勧めします。たとえば、パラメーターを 8192 または 16384 に設定できます。
    説明 dfs.datanode.max.transfer.threads パラメーターは、DataNodeがデータの読み取りおよび書き込みストリームの処理に使用できるスレッドの最大数を指定します。デフォルト値:4096。