AWS Glue のストリーミングジョブを最適化したいです。
解決策
AWS Glue のストリーミングジョブを最適化するには、次のベストプラクティスを実施してください。
- Amazon CloudWatch を使用して AWS Glue ストリーミングジョブのメトリクスを監視します。ジョブに受信データレートに対応するための十分な CPU、メモリ、エグゼキューターがあることを確認します。
- バッチ間隔は、バッチ処理時間より長期である必要があります。バッチ処理時間を短縮する方法については、Apache Spark のウェブサイトで「バッチ処理時間の短縮」を参照してください。
- AWS Glue データカタログを使用してデータスキーマを保存、管理します。
- Apache Parquet などの効率的なデータシリアル化形式を使用してください。Apache Parquet の詳細については、Apache Spark のウェブサイトで「Parquet ファイル」を参照してください。
- チェックポイント機能を有効にします。詳細については、Apache Spark のウェブサイトで「チェックポイント機能」を参照してください。
- Apache Iceberg などのオープンテーブル形式を使用します。ストリーミングジョブがデータレイクテーブルを使用しない場合は、テーブルを Iceberg に移行します。コミットを微調整し、古いスナップショットは失効させ、コンパクションを使用してメタデータファイルをクリーンアップするよう注意してください。Iceberg テーブルのメンテナンス方法の詳細については、Apache Iceberg のウェブサイトで「推奨されるメンテナンス」を参照してください。
- 自動スケーリングを有効にします。
注: 自動スケーリングは AWS Glue バージョン 3.0 以降でのみ使用できます。
- 抽出、変換、ロード (ETL) ジョブを使用または作成する際には、ベストプラクティスに従ってください。
Spark ストリーミングを調整する
次の構成を使用して、Spark Streaming のストリーミングを調整します。
- spark.streaming.backpressure.enabled を使用すると、バックプレッシャーを有効にしてストリーミングジョブの受信レートを制御し、スケジュール機能の遅延や処理時間を補正できます。
- spark.streaming.receiver.maxRate を使用すると、レシーバーがデータを受信できる最大レートを上げることができます。この値は、1 秒あたりのレコード数で設定します。
- レシーバーで先行書き込みログ (WAL) を有効にするには、spark.streaming.receiver.writeAheadLog.enable を使用します。WAL を使用すると、ドライバーで障害が発生した際にデータを回復できます。
- 少数のファイルを作成するサイズウィンドウを定義するには、windowSize を使用します。詳細については、「インタラクティブ開発用に入力ストリームをサンプリングする」を参照してください。
- spark.sql.shuffle.partition を使用すると、シャッフルパーティションを調整してデータを効率的にシャッフルすることで、広範な変換を行うことができます。
詳細については、Apache Spark のウェブサイトで「パフォーマンスの調整」を参照してください。
関連情報
AWS Glue ストリーミングジョブのトラブルシューティング方法を教えてください
Amazon Kinesis 接続
Kafka 接続
Docker イメージを使用して開発する