翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
クラスター容量のスケーリング
ジョブに時間がかかりすぎているが、エグゼキュターが十分なリソースを消費していて、Spark が使用可能なコアに対して大量のタスクを作成している場合は、クラスター容量のスケーリングを検討してください。これが適切かどうかを評価するには、次のメトリクスを使用します。
CloudWatch メトリクス
-
CPU Load and Memory Utilization をチェックして、エグゼキュターが十分なリソースを消費しているかどうかを確認します。
-
ジョブが実行された時間をチェックして、処理時間がパフォーマンス目標を満たすには長すぎるかどうかを評価します。
次の例では、4 つのエグゼキュターが 97% を超える CPU ロードで実行されていますが、約 3 時間後に処理が完了していません。
注記
CPU 負荷が低い場合、クラスター容量のスケーリングによるメリットは得られないでしょう。
Spark UI
ジョブタブまたはステージタブで、各ジョブまたはステージのタスク数を確認できます。次の例では、Spark が58100
タスクを作成しています。
エグゼキュタータブには、エグゼキュターとタスクの総数が表示されます。次のスクリーンショットでは、各 Spark エグゼキュターには 4 つのコアがあり、4 つのタスクを同時に実行できます。
この例では、Spark タスクの数 (58100)
は、エグゼキュターが同時に処理できる 16 個のタスク (4 個のエグゼキュター x 4 コア) よりもはるかに大きくなります。
これらの症状が発生した場合は、クラスターのスケーリングを検討してください。次のオプションを使用して、クラスター容量をスケーリングできます。
-
Enable AWS Glue Auto Scaling – Auto Scaling は、 AWS Glue バージョン 3.0 以降の AWS Glue 抽出、変換、ロード (ETL) およびストリーミングジョブで使用できます。 は、各ステージのパーティション数またはジョブ実行時にマイクロバッチが生成される速度に応じて、自動的にワーカーをクラスター AWS Glue に追加および削除します。
Auto Scaling が有効になっていてもワーカー数が増えない状況に気付いた場合は、ワーカーを手動で追加することを検討してください。ただし、1 つのステージを手動でスケーリングすると、後続のステージで多くのワーカーがアイドル状態になり、パフォーマンスの向上にはより多くのコストがかかる可能性があることに注意してください。
Auto Scaling を有効にすると、 CloudWatch エグゼキュターメトリクスにエグゼキュターの数が表示されます。Spark アプリケーションのエグゼキュターの需要をモニタリングするには、次のメトリクスを使用します。
-
glue.driver.ExecutorAllocationManager.executors.numberAllExecutors
-
glue.driver.ExecutorAllocationManager.executors.numberMaxNeededExecutors
メトリクスの詳細については、「Amazon CloudWatch メトリクス AWS Glue を使用したモニタリング」を参照してください。
-
-
スケールアウト: ワーカー数 AWS Glue を増やす – ワーカー数 AWS Glue を手動で増やすことができます。アイドル状態のワーカーを観察するまでのみワーカーを追加します。この時点で、ワーカーを追加すると、結果を改善せずにコストが増加します。詳細については、「タスクの並列化」を参照してください。
-
スケールアップ: より大きなワーカータイプを使用する – AWS Glue より多くのコア、メモリ、ストレージを持つワーカーを使用するように、ワーカーのインスタンスタイプを手動で変更できます。ワーカータイプが大きいほど、メモリを大量に消費するデータ変換、偏った集約、ペタバイト単位のデータを含むエンティティ検出チェックなど、大量のデータ統合ジョブを垂直方向にスケーリングして実行できます。
スケールアップは、ジョブクエリプランが非常に大きいため、Spark ドライバーでより大きな容量が必要な場合にも役立ちます。ワーカータイプとパフォーマンスの詳細については、 AWS Big Data Blog の記事「新しい大きなワーカータイプ G.4X と G.8X を使用して Apache Spark ジョブ AWS Glue のスケーリング
」を参照してください。 ワーカー数を大きくすると、必要なワーカーの総数も減り、結合などの集中的な操作でシャッフルを減らすことでパフォーマンスが向上します。