本記事は Classi Advent Calendar 2020 15日目の記事です。
こんにちは。データAI部でデータエンジニアをしている@tomoyanamekawaです。
GCPにはデータ処理関連のサービスが複数あり、「Aにあるデータを加工してBに置きたい」といった処理(ETL処理)の実現方法がGCP内のサービスに限っても様々な選択肢があります。
また、data*
といった似た名前のサービスが多く、初見だとわかりづらい部分があります。
そこでそれらサービスの使い分けの参考になればと思ってまとめます。
GCPにあるETL処理関連のサービス紹介
ETL処理に関連するサービスだけでも下記のように複数あります。
-
Cloud Composer
Apache Airflowをベースにしたワークフロー管理サービス。
裏でGKEが立っていてユーザーからクラスターやインスタンスも見えて、少し管理が必要なのでフルマネージドサービスではない。 -
Dataflow
Apache Beamをベースにしたデータ処理のフルマネージドサービス。
ストリーム処理とバッチ処理両方に対応しており、オートスケールにも対応しているので重い処理や複雑な処理に向いている。 -
Dataprep
GUIで操作できるデータ処理のフルマネージドサービス。
内部的にはDataflowになっていて、作成したjobはDataflowの画面でも管理できる。
データを可視化しながら加工処理ができるので、探索的に行う処理を決められる。 -
Dataproc
SparkやHadoopなどのクラスタを構築してくれるサービス。 -
Cloud Data Fusion
GUIで操作できるDataproc。
また、BigQueryやGCSの中の機能でも、queryを定期実行してくれるscheduled queryや、S3→GCS, GCS→BQなどデータ転送してくれるData Transfer Serviceもあります。
さらに最近Dataformというサービスを買収したというニュースもあったので、サービスがさらに増えるかもしれません。
いつどのサービス・機能を使えばいいのか
上記のように複数のサービスがあり、出番が被るものもありますがある程度の住み分けはあります。
そこで用途ごとにどのサービスが選択肢に入るか上げてみます。
(個人の意見です)
データパイプライン全体の管理
- 候補になるGCPサービス・機能
- Cloud Composer
複数のETL処理を依存関係含めてまとめて管理したい場合はワークフローエンジンの範囲なので、GCPのサービスではCloud Composer一択です。
ただCloud Composer(Airflow)はWebUI含め機能がリッチであったり、GKEを使っているためGCEなどに比べ少しお高いといった面があります。
そのためケースによってはDigdagなどの他のワークフローエンジンをGCE等のVM上で簡易に利用したほうがコスパがいいこともあります。
また、troccoなどのSaaSを利用するといった選択肢もあります。
ストリーム処理や複雑・重いETL処理をする
- 候補になるGCPサービス・機能
- Dataflow
- Dataproc
この二つはできることが似ているので、よく「Dataflow vs Dataproc」といった記事を見かけます。
個人的にはすでにSparkやHadoopの資産・知見があるという場合以外はDataflowでいいんじゃないかと思っています。
GCPの公式では下の画像で使い分けが説明されていました。
(https://cloud.google.com/dataflow/images/flow-vs-proc-flowchart.svg)
DataprepやCloud Data Fusionも選択肢に入りますが、GUIベースのサービスなので複雑な処理ではコードベースで管理できるサービスのほうが好まれるかと思います。
サクッとETL処理を試しに組みたい
- 候補になるGCPサービス・機能
- Dataprep
- Cloud Data Fusion
普段コードをあまり書かないデータアナリストなどがPoCやお試しでETL処理をしたい場合にGUIベースで操作できるこのあたりのサービスが良さそうです。
データソースがBQかGCSならDataprepのがBIツールライクなのでおすすめです。
BQ内でテーブルの加工を定期的にしたい
- 候補になるGCPサービス・機能
- Cloud Composer
- scheduled query
BQ内で完結するのであればqueryのみで加工処理が記述してあるほうがBQの処理能力を使えてかつ、シンプルなので好ましいです。
そのためqueryをどう管理・実行するかの問題になり、このあたりのサービス・機能が候補になります。
どう組み合わせるか
実際にデータ基盤を構築する場合には複数のサービスを組み合わせることになります。
全体を管理するためにワークフローエンジンを使うことになると思いますが、Cloud Compsoerなどのワークフローエンジンはデータ処理がメインのツールではないため、重い処理には向きません。
(Cloud composerもGKEですが、オートスケールせずにworker数を固定で運用されます。)
そのため、Cloud composerでタスクを管理して、実際の処理はDataflowやBQなどに任せるといった構成になったりします。
まとめ
GCPにはデータ周りのサービスがいろいろあって、ややこしいけどある程度住み分けはある。
それぞれの役割や類似サービスを理解して必要十分なデータパイプラインを構築しましょう!
明日は@willsmileさんです!