NO_SLAVE_LEFT で Amazon EMR クラスターが終了し、FAILED_BY_MASTER でコアノードが終了する - Amazon EMR

NO_SLAVE_LEFT で Amazon EMR クラスターが終了し、FAILED_BY_MASTER でコアノードが終了する

このエラーは通常、削除保護が無効になっており、すべてのコアノードが yarn-site.xml ファイルに対応する yarn-site 設定分類の最大使用率しきい値で指定したディスクストレージ容量を超過したことが原因で発生します。この値のデフォルト値は 90% です。コアノードのディスク使用率が使用率のしきい値を超えると、YARN NodeManager のヘルスサービスにより、ノードが UNHEALTHY として報告されます。この状態になっていると、Amazon EMR はノードを拒否リストに追加し、YARN コンテナを割り当てません。ノードの異常が 45 分間続いた場合、Amazon EMR は関連付けられている Amazon EC2 インスタンスを終了するために FAILED_BY_MASTER のマークを付けます。コアノードに関連付けられているすべての Amazon EC2 インスタンスに終了のマークが付けられると、ジョブを実行するリソースがなくなるため、クラスターはステータス NO_SLAVE_LEFT で終了します。

1 つのコアノードのディスク使用率がしきい値を超えると、連鎖反応が起きる可能性があります。HDFS が原因で 1 つのノードのディスク使用率がしきい値を超えた場合、他のノードのディスク使用率もしきい値に近づいていると考えられます。最初のノードのディスク使用率がしきい値を超えると、Amazon EMR はそのノードを拒否リストに追加します。これにより、拒否リストに追加されたノードで失った HDFS データを残りのノードがそれぞれの間でレプリケートし始めるため、ノードのディスク使用率が上昇します。その後、各ノードも同じように UNHEALTHY の状態になり、最終的にはクラスターが終了します。

ベストプラクティスとレコメンデーション

クラスターハードウェアに十分なストレージを設定する

クラスターを作成するときに、十分な数のコアノードがあること、および各ノードに HDFS 用の十分なインスタンスストアと EBS ストレージボリュームがあることを確認します。詳細については、「クラスターの必要な HDFS 容量の計算」を参照してください。手動で、または Auto Scaling を使用して既存のインスタンスグループにコアインスタンスを追加することもできます。新しいインスタンスのストレージ設定は、インスタンスグループ内の他のインスタンスと同じになります。詳細については、「Amazon EMR クラスタースケーリングを使用してワークロードの変化に適応する」を参照してください。

終了保護を有効化する

削除保護を有効にします。このようにすると、コアノードが拒否リストに追加された場合に、SSH を使用して関連付けられている Amazon EC2 インスタンスに接続し、トラブルシューティングを行ってデータを復旧できます。終了保護を有効にすると、Amazon EMR が Amazon EC2 インスタンスを新しいインスタンスに置き換えなくなる点に注意してください。詳細については、「Amazon EMR クラスターを誤ったシャットダウンから保護するための終了保護の使用」を参照してください。

MRUnhealthyNodes CloudWatch メトリクスのアラームを作成する

このメトリクスは、ステータスが UNHEALTHY のノードの数を報告します。これは、YARN メトリクス mapred.resourcemanager.NoOfUnhealthyNodes と同等です。このアラームの通知を設定すれば、45 分のタイムアウトに達する前に異常が発生したノードに関する警告を受け取ることができます。詳細については、「CloudWatch で Amazon EMR のメトリクスをモニタリングする」を参照してください。

yarn-site を使用して設定を微調整する

以下の設定は、アプリケーションの要件に合わせて調整できます。たとえば、yarn.nodemanager.disk-health-checker.max-disk-utilization-per-disk-percentage の値を増やすことにより、ノードが UNHEALTHY と報告するディスク使用率のしきい値を上げることができます。

これらの値は、yarn-site 設定分類を使用してクラスターを作成するときに設定できます。詳細については、「Amazon EMR リリースガイドの」「アプリケーションの設定」を参照してください。SSH を使用してコアノードに関連付けられている Amazon EC2 インスタンスに接続し、テキストエディターを使用して /etc/hadoop/conf.empty/yarn-site.xml に値を追加することもできます。変更を加えたら、以下のように hadoop-yarn-nodemanager を再起動する必要があります。

重要

クラスターの作成時に yarn-site 設定分類を使用して yarn.nodemanager.recovery.enabledtrue に設定していなければ、NodeManager サービスを再起動するときにアクティブな YARN コンテナが強制終了されます。そのため、yarn.nodemanager.recovery.dir プロパティを使用して、コンテナの状態を保存するディレクトリも指定する必要があります。

sudo /sbin/stop hadoop-yarn-nodemanager sudo /sbin/start hadoop-yarn-nodemanager

最新の yarn-site プロパティとデフォルト値の詳細については、Apache Hadoop ドキュメントの「YARN のデフォルト設定」を参照してください。

プロパティ デフォルト値 説明

yarn.nodemanager.disk-health-checker.interval-ms

120000

ディスクのヘルスチェッカーを実行する頻度 (秒)。

yarn.nodemanager.disk-health-checker.min-healthy-disks

0.25

NodeManager で新しいコンテナを起動するために正常でなければならないディスク数の最小比率。これは、yarn.nodemanager.local-dirs (デフォルトでは、Amazon EMR の /mnt/yarn) と yarn.nodemanager.log-dirs (デフォルトでは /var/log/hadoop-yarn/containers で、Amazon EMR の mnt/var/log/hadoop-yarn/containers に対してシンボリックリンクされています) の両方に対応しています。

yarn.nodemanager.disk-health-checker.max-disk-utilization-per-disk-percentage

90.0

ディスクが異常であるとマークされてから許容されるディス容量使用率の最大パーセンテージ。値の範囲は 0.0~100.0 です。この値が 100 以上になると、NodeManager によってディスク全体のチェックが行われます。これは、yarn-nodemanager.local-dirsyarn.nodemanager.log-dirs に適用されます。

yarn.nodemanager.disk-health-checker.min-free-space-per-disk-mb

0

使用するために最低限確保しておく必要があるディスク容量。これは、yarn-nodemanager.local-dirsyarn.nodemanager.log-dirs に適用されます。