Amazon EMR Serverless ジョブが開始しない、実行が遅い、ジョブが PENDING 状態のままになるなどの問題をトラブルシューティングしたいです。
簡単な説明
コールドスタートは、システムがアイドル状態の場合や、低いベースからスケーリングした場合に、リソースのプロビジョニングに時間がかかると発生します。
ジョブを送信し、InitialCapacity のワーカーが使用可能な場合、そのジョブは InitialCapacity リソースを使用して実行されます。別のジョブが InitialCapacity リソースを使用している場合、Amazon EMR Serverless アプリケーションは最大クォータまで追加のワーカーをリクエストします。
解決策
Amazon EMR Serverless ジョブが開始されない、実行が遅い、または PENDING 状態のままになる場合のトラブルシューティングを行うには、以下のアクションを実行します。
- ドライバーとワーカーを迅速に応答させ、アプリケーションをすぐに起動できるようにするには、事前に初期化されたキャパシティを使用してください。
- Hive と Spark に適切な initialCapacity を設定します。
- ドライバーとエグゼキューターに別々のサイズを設定します。
- ジョブをスケールアップするには、CPU、メモリ、ディスクの最大容量を指定します。
- アイドル状態のリソースを避けるには、コンテナサイズを事前に初期化されたキャパシティワーカーサイズに合わせます。たとえば、Spark の実行サイズを、事前に初期化されたキャパシティワーカーサイズと同じにします。
- アプリケーションのパフォーマンスを判断し、潜在的なボトルネックを特定するには、Spark UI または Hive Tez UI のステージおよび、各ステージの期間を確認します。詳細については、「ジョブワーカーレベルの監視」と「Spark のトラブルシューティングとパフォーマンスチューニング」を参照してください。
- Spark のベストプラクティスと Hive のベストプラクティスに従ってください。Amazon EMR リリース 7.1.0 以降では、I/O を多用するワークロードのパフォーマンスを向上させるために、Apache Spark または Hive ジョブを実行するときには、シャッフル最適化ディスクを使用してください。
- ジョブの失敗をトラブルシューティングするために、Amazon EMR Serverless がアプリケーションログを保存および管理する方法を選択します。
- 自動停止設定機能を変更するか、無効にします。デフォルト値は 15 分に設定されています。
- ジョブで瞬間的に高い同時実行が必要になった場合のボトルネックを防ぐため、spark.executor.instances は 1 に設定して使用しないでください。
- ジョブのパフォーマンスを向上させるには、spark.dynamicAllocation.enabled が true の場合に、spark.dynamicAllocation.minExecutors を増やします。また、spark.dynamicAllocation.enabled が false の場合に、spark.executor.instances の値を増やします。