Amazon EMR ジョブが [Accepted] (承認済み) 状態でスタックしており、ログに「WARN YarnScheduler: Initial job has not accepted any resources; check your cluster UI to ensure that workers are registered and have sufficient resources」(WARN YarnScheduler: 最初のジョブはリソースを承認していません。クラスター UI を確認して、ワーカーが登録されており、かつ、十分なリソースがあるようにしてください) と表示されます。
簡単な説明
ジョブリクエストを完了するために十分なリソースがクラスターにない場合、EMR ジョブは [Accepted] (承認済み) 状態でスタックします。この事象は、次の理由により発生する可能性があります。
- YARNMemoryAvailablePercentage が非常に低く、コンテナの多くが保留中になっている。
- コアノード上のリソースが不十分であるため、アプリケーションはアプリケーションマスターを起動できない。これは、Amazon EMR 6.x シリーズを除いて、Amazon EMR 5.19.0 以降で発生する可能性があります。
- コアノードが異常である。
- 1 つの EMR ジョブがすべてのリソースを消費している。
解決方法
ジョブリクエストを完了するために十分なリソースがクラスターにない
1. Resource Manager UI に接続するか、または任意のノードから次のコマンドを実行してリソースを確認します。
yarn top 10
2. [Used Resources] (使用済みリソース) が [Total Resources] (合計リソース) とほぼ等しいかどうかを確認します。また、Amazon CloudWatch メトリクスで YARNMemoryAvailablePercentage および MemoryAvailableMB を確認することもできます。
4. 必要に応じて、クラスターにキャパシティをさらに追加します。EMR Managed Scaling または自動スケーリングを使用して、リソースの使用状況に基づいてキャパシティを自動的に追加または縮小できます。
コアノード上のリソースが不十分である
EMR 5.19.0 以降 (6.0 シリーズを除く) では、アプリケーションマスターはデフォルトでコアノード上で実行されます。 EMR 6.x シリーズでは、アプリケーションマスターはコアノードとタスクノードの両方で実行できます。
送信されるジョブの数が増え、コアノードの数が減ったため、コアノードは別のアプリケーションマスターコンテナを割り当てることができません。そのため、タスクノードに十分なメモリがあっても、ジョブがスタックする可能性があります。この場合、コンテナログに次のメッセージが表示されることがあります。
Application is Activated, waiting for resources to be assigned for AM. Last Node which was processed for the application : ip-xxxx:8041 ( Partition : [], Total resource :
<memory:516096, vCores:64>, Available resource : <memory:516096,vCores:64> ). Details : AM Partition = CORE ; Partition Resource =
<memory:516096, vCores:64> ; Queue's Absolute capacity = 100.0 % ; Queue's Absolute used capacity = 99.53497 % ; Queue's Absolute max capacity =100.0 %
この場合には、ジョブを終了して一部のリソースを解放します。または、クラスターにコアノードをさらに追加します。
さらに、Amazon EMR 5.x では YARN ラベルをオフにすることもできます。
コアノードが異常である
コアノードのディスク容量が不足し、マウントポイントのディスク使用率が 90% を超える場合、Amazon EMR は、ノードを異常であるとみなします。異常なノードでは、新しいコンテナはスケジュールされません。この場合、プライマリインスタンスのコントローラーログに次のメッセージが表示されます。ログは /emr/instance-controller/log にあります。
Yarn unhealthy Reason : 1/4 local-dirs usable space is below configured utilization percentage/no more usable space [ /mnt/yarn : used space above threshold of 90.0% ] ; 1/1 log-dirs usable space
is below configured utilization percentage/no more usable space [ /var/log/hadoop-yarn/containers : used space above threshold of 90.0% ]
異常なノードを修正するには、古いコンテナログまたはスパークイベントログを削除することによってディスク使用量を減らします。 ディスク使用率に基づいてストレージを動的にスケールすることもできます。
1 つのジョブがすべてのリソースを消費しているか、または Spark パラメータがクラスターの制限を超えて設定されている
Amazon EMR では、Spark Dynamic Allocation がデフォルトでオンになっています。Spark ジョブが適切に設定されていない場合、そのジョブはクラスターのすべてのリソースを消費する可能性があります。例えば、このエラーは、Max Executors (spark.dynamicAllocation.maxExecutors) の上限が十分に高くない場合に発生します。Spark ジョブでは、1 つのジョブがクラスターのすべてのリソースを消費しないように、メモリの制約を調整します。
エグゼキューターメモリまたはドライバーメモリが Yarn で設定されたパラメータよりも大きい場合、ジョブの受け入れは失敗します。Yarn で設定されたパラメータは、yarn.scheduler.maximum-allocation-mb および yarn.nodemanager.resource.memory-mb です。この場合、次のようなエラーメッセージが表示されます。
22/01/03 20:05:05 INFO Client: Verifying our application has not requested more than the maximum memory capability of the cluster (24576
MB per container)
Exception in thread "main" java.lang.IllegalArgumentException: Required executor memory (49152),overhead (6144 MB), and PySpark memory (0 MB) is above the max threshold
(24576 MB) of this cluster! Please check the values of 'yarn.scheduler.maximum-allocation-mb' and/or 'yarn.nodemanager.resource.memory-mb'.
これを解決するには、次を実行します。