🗻

Dataflow Prime のバッチジョブで垂直スケールする方法

2023/04/21に公開

はじめに

こんにちは、クラウドエース データML ディビジョン所属の坂田です。

クラウドエースの IT エンジニアリングを担うシステム開発部の中で、特にデータ基盤構築・分析基盤構築からデータ分析までを含む一貫したデータ課題の解決を専門とするのがデータML ディビジョンになります。

データML ディビジョンでは活動の一環として、毎週 Google Cloud の新規リリースを調査・発表し、データ領域のプロダクトのキャッチアップをしています。
その中でも重要と考えるリリースを本ページ含め記事として公開しています。

今回紹介するリリースは、「Dataflow Prime のバッチジョブの垂直自動スケーリング」についてになります。

このリリースにより、Dataflow Prime 専用の機能である垂直自動スケーリングがバッチジョブでも利用可能になります。

Dataflow とは

Dataflow とは、サーバーレス環境で大規模なデータ処理を行うことができる Google Cloud のフルマネージドサービスです。Dataflow ではオープンソースの Apache Beam で構築したデータ処理パイプラインを実行でき、バッチ処理とストリーミング処理を行うことができます。

また、Dataflow Prime とは、パイプラインのパフォーマンスや必要なリソースを最適化できる機能が各種提供されている、Dataflow の新しいプラットフォームです。

以下のような Dataflow Prime 専用の機能があります。

  • 垂直自動スケーリング:ワーカーの負荷に応じてワーカーのメモリを自動的にスケーリングする
  • Right Fitting:ジョブの処理ステップごとにワーカーのスペックを最適化する

今回のリリースの解説

リリース概要

2023 年 3 月 28 日付けで以下のようなリリースがありました。

Vertical Autoscaling now supports batch jobs.
(日本語訳)Dataflow Primeのバッチジョブで垂直自動スケーリングがサポートされます

https://cloud.google.com/dataflow/docs/release-notes#March_28_2023

Dataflow Prime の垂直自動スケーリングとは

垂直自動スケーリングとは、ワーカーの負荷に応じてワーカーのメモリを自動的にスケールアップ・ダウンする機能で、Dataflow Prime のみで提供されている機能です。

Dataflow(Dataflow Prime ではなく)では、ジョブを実行する際にワーカーのスペック(Compute Engine のマシンタイプ)を指定しますが、処理によって、メモリ不足・過剰容量が発生する場合がありました。
Dataflow Prime の垂直自動スケーリングを導入することで、メモリ不足によるジョブの失敗の回避や処理の効率化を行うことができます。

従来はストリーミングジョブのみのサポートでしたが、今回のリリースにより、バッチジョブでも利用できるようになりました。

なお、垂直スケールされるのはワーカーのメモリのみです。

垂直自動スケーリングが有効なケース

大規模な GroupBy GroupByKey の処理を行う場合や DoFn による分散処理で各個別の処理が多くのメモリを消費する場合はワーカーがメモリ不足が起こりやすいとされています。
バッチジョブにおける垂直自動スケーリングはメモリ不足エラーが 4 回発生した後でのみ行われるため、メモリ不足によるジョブの失敗を防ぐことができます。

参考「Dataflow のメモリ不足エラーのトラブルシューティング」
https://cloud.google.com/dataflow/docs/guides/troubleshoot-oom?hl=ja

垂直自動スケーリングの料金

垂直自動スケーリングの機能自体に料金は発生しません。

Dataflow Prime はジョブで使用されたコンピューティングリソースの量に応じた課金となっています。通常の Dataflow とは異なり、Dataflow Processing Unit(DPU)という単位で料金が計算されます。
そのため、垂直自動スケーリングでリソースを多く使った場合はその分だけ料金は加算されます。

Dataflow Prime の具体的な料金の説明はこちら。

https://cloud.google.com/dataflow/pricing?hl=ja#dataflow-prime

垂直自動スケーリングの設定方法

Dataflow Prime を使用する場合、ストリーミングジョブはデフォルトで垂直自動スケーリングが有効化されていますが、バッチジョブの場合はオプションで有効化する必要があります。
バッチジョブで設定するコマンドラインオプションは以下の 4 つです。

--dataflow_service_options=enable_prime
--experiments=enable_batch_vmr
--experiments=enable_vertical_memory_autoscaling
--experiments=auto_use_sibling_sdk_workers=false

Pythonコードにおいて、PipelineOptions に設定する場合の例は以下です。

options = PipelineOptions(
    runner='DataflowRunner',
    project='XXX',
    job_name='XXX',
    temp_location='gs://XXX',
    region='us-central1',
    dataflow_service_options=['enable_prime'],
    experiments=['enable_batch_vmr', 'enable_vertical_memory_autoscaling', 'auto_use_sibling_sdk_workers=false'])

(上記 2 つは Apache Beam Python SDK バージョン 2.29.0 以降の場合です)

まとめ

今回の記事では、Dataflow Prime のバッチジョブにおける垂直自動スケーリングについてのリリースを紹介しました。

垂直自動スケーリングはオプションにいくつか設定するだけで簡単に利用できます。
また、Dataflow Prime 自体も同じく簡単に試すことができるので、ぜひ試してみてください。

Discussion