Amazon EMR ジョブの状態が Accepted から進まなくなり、ログには次の内容が表示されています。"WARN YarnScheduler: 初期ジョブはリソースを受け付けませんでした。クラスター UI で、ワーカーが登録済みであり、十分なリソースがあることを確認してください。"
簡単な説明
クラスターにジョブリクエストを満たすための十分なリソースがない場合、EMR ジョブの状態は Accepted から進まなくなります。この問題は、次の原因で発生する場合があります。
- YARNMemoryAvailablePercentage が非常に低いため、コンテナの多数が保留中になっている。
- コアノードのリソースが不足しているため、アプリケーションがアプリケーションマスターを起動できない。これは Amazon EMR 5.19.0 以降で発生する可能性がありますが、Amazon EMR 6.x シリーズには該当しません。
- コアノードが正常ではない。
- 単一の EMR ジョブがすべてのリソースを消費している。
解決策
クラスターのリソースが不足しているため、ジョブリクエストを処理できない
1.Resource Manager UI に接続するか、任意のノードから次のコマンドを使用してリソースを確認します。
yarn top 10
2.使用済みリソースが合計リソースとほぼ同じになっているかどうかを確認します。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% ]
異常のあるノードを修正するには、古いコンテナログや Spark イベントログを削除してディスク使用量を削減します。ディスク使用率に基づいてストレージを動的にスケーリングすることも有効です。
1 つのジョブがすべてのリソースを消費しているか、Spark のパラメータ設定がクラスターの制限を超えている
Amazon EMR では、Spark Dynamic Allocation がデフォルトで有効になっています。Spark ジョブが適切に構成されていない場合、ジョブはクラスターのすべてのリソースを消費する可能性があります。たとえば、このエラーは、最大エグゼキューター数 (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'.
解決するには、次の手順を実行します。