このトピックでは、DataNode の Xceiver 上限の例外を解決する方法について説明します。
次のエラーが表示された場合、DataNode は Xceiver スレッドプールを使い果たし、これ以上同時の読み取りまたは書き込み接続を受け入れることができません。
エラーメッセージ
java.io.IOException: Xceiver count xxxx exceeds the limit of concurrent xcievers: xxxx原因
dfs.datanode.max.transfer.threads パラメーターは、DataNode が読み取りおよび書き込みデータストリームを処理するために使用するスレッドプールのサイズを制御します。デフォルト値は 4096 です。多くの並列読み取りまたは書き込みジョブが同時に実行されるなど、高い同時実行数のワークロード下では、スレッドプールが枯渇し、上記のエラーがトリガーされる可能性があります。
ソリューション
Hadoop 分散ファイルシステム (HDFS) サービスの構成で dfs.datanode.max.transfer.threads の値を増やします。
EMR on ECS コンソールにログインします。
上部のナビゲーションバーで、クラスターが存在するリージョンを選択し、リソースグループを選択します。
HDFS サービスの [設定] タブを開きます。
EMR on ECS ページで、対象のクラスターを見つけ、[操作] 列の [サービス] をクリックします。
[サービス] タブをクリックし、HDFS サービスを見つけて [設定] をクリックします。
[設定] タブで、検索ボックスに
dfs.datanode.max.transfer.threadsを入力してパラメーターを特定し、その値を増やします。一般的な開始点として、現在の値を 2 倍にします。たとえば、8192 または 16384 に設定します。