

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Spark ジョブのパフォーマンスをチューニングするための戦略
<a name="performance-tuning-strategies"></a>

パラメータのチューニングを準備する際は、次のベストプラクティスを使用します。
+ 問題の特定を始める前に、パフォーマンス目標を決定します。
+ パラメータのチューニングを変更する前に、メトリクスを使用して問題を特定します。

ジョブのチューニングで一貫した結果を得るには、チューニング作業のベースライン戦略を立てます。

## パフォーマンスチューニングのベースライン戦略
<a name="baseline"></a>

通常、パフォーマンスチューニングは次のワークフローで実施します。

1. パフォーマンス目標を決定します。

1. メトリクスを測定します。

1. ボトルネックを特定します。

1. ボトルネックの影響を軽減します。

1. 想定目標を達成するまで、ステップ 2～4 を繰り返します。

まず、パフォーマンス目標を決定します。たとえば、目標の 1 つは 3 時間以内に AWS Glue ジョブの実行を完了することです。目標を定義したら、ジョブのパフォーマンスメトリクスを測定します。目標を達成するために、メトリクスとボトルネックの傾向を特定します。特に、トラブルシューティング、デバッグ、パフォーマンスチューニングには、ボトルネックを特定することが最も重要です。Spark アプリケーションの実行中に、Spark は各タスクのステータスと統計を Spark イベントログに記録します。

では AWS Glue、Spark 履歴サーバーが提供する [Spark Web UI](https://spark.apache.org/docs/latest/web-ui.html) を使用して Spark メトリクスを表示できます。Spark ジョブ AWS Glue 用 はAmazon S3 で指定した場所に [Spark イベントログ](https://docs.aws.amazon.com/glue/latest/dg/monitor-spark-ui-jobs.html)を送信できます。 には、Amazon EC2 インスタンスまたはローカルコンピュータで Spark 履歴サーバーを起動するためのサンプル[AWS CloudFormation テンプレート](https://docs.aws.amazon.com/glue/latest/dg/monitor-spark-ui-history.html#monitor-spark-ui-history-cfn)と [Dockerfile](https://docs.aws.amazon.com/glue/latest/dg/monitor-spark-ui-history.html#monitor-spark-ui-history-local) AWS Glue も用意されているため、イベントログで Spark UI を使用できます。

パフォーマンス目標を決定し、それらの目標を評価するメトリクスを特定したら、次のセクションの戦略を使用してボトルネックの特定と修復を開始できます。

## Spark ジョブパフォーマンスのチューニングプラクティス
<a name="tuning-practices"></a>

 AWS Glue Spark ジョブのパフォーマンス調整には、次の戦略を使用できます。
+ AWS Glue リソース:
  + [クラスター容量をスケールする](scale-cluster-capacity.md)
  + [AWS Glue 最新バージョンを使用する](latest-version.md)
+ Spark アプリケーション:
  + [データスキャン量を削減する](reduce-data-scan.md)
  + [タスクを並列化する](parallelize-tasks.md)
  + [シャッフルを最適化する](optimize-shuffles.md)
  + [計画オーバーヘッドを最小限に抑える](minimize-planning-overhead.md)
  + [ユーザー定義関数を最適化する](optimize-user-defined-functions.md)

これらの戦略を使用する前に、Spark ジョブのメトリクスと設定にアクセスできる必要があります。この情報は、[AWS Glue のドキュメント](https://docs.aws.amazon.com/glue/latest/dg/etl-jobs-section.html)で確認できます。

 AWS Glue リソースの観点からは、 AWS Glue ワーカーを追加し、 AWS Glue 最新バージョンを使用することで、パフォーマンスを向上させることができます。

Apache Spark アプリケーションの観点からは、パフォーマンスを向上させるいくつかの戦略を使用できます。不要なデータが Spark クラスターにロードされた場合は、それを削除してロードされたデータ量を減らすことができます。Spark クラスターのリソースが十分に使用されておらず、データ I/O が少ない場合は、並列化するタスクを特定できます。また、結合などの大量のデータ転送オペレーションにかなりの時間がかかっている場合は、それらを最適化することもできます。ジョブのクエリプランを最適化したり、個々の Spark タスクの計算の複雑さを軽減したりすることもできます。

これらの戦略を効率的に適用するには、メトリクスを確認して適用可能なタイミングを特定する必要があります。詳細については、次の各セクションを参照してください。これらの手法は、パフォーマンスのチューニングだけでなく、メモリ不足 (OOM) エラーなどの一般的な問題の解決にも役立ちます。