翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
クラスター容量のスケーリング
ジョブに時間がかかりすぎているが、エグゼキュターが十分なリソースを消費していて、Spark が使用可能なコアに対して大量のタスクを作成している場合は、クラスター容量のスケーリングを検討してください。これが適切かどうかを評価するには、次のメトリクスを使用します。
CloudWatch メトリクス
-
CPU 負荷とメモリ使用率をチェックして、エグゼキュターが十分なリソースを消費しているかどうかを確認します。
-
ジョブが実行された時間をチェックして、処理時間がパフォーマンス目標を満たすには長すぎるかどうかを評価します。
次の例では、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 の記事「Scale your AWS Glue for Apache Spark jobs with new larger worker types G.4X and G.8X
」を参照してください。 大規模なワーカーを使用すると、必要なワーカーの合計数を減らすこともできます。これにより、結合などの集中的な操作でシャッフルを減らすことでパフォーマンスが向上します。