1.Dataprocとは
Google Cloud Dataprocは、GCP上で提供されるマネージドなHadoop/Sparkクラスターです。エンタープライズ用途から軽量ETLバッチまで、柔軟かつ高速にジョブを実行することが可能です。
特に以下のような特徴があります:
- Ephemeral(短命)クラスタに対応しており、ジョブ実行後に自動削除される
- Apache Sparkによる高速な分散処理を中心に、機械学習・ETLバッチ処理など幅広く対応
- Hadoop由来のHDFSやYARNなども利用可能(ただしGCSやSparkオンリー構成も主流)
1.1.定期ETLの構成例
Dataprocを使った日次ETLジョブの構成例を以下に示します:
- Cloud Scheduler(毎日朝6時にトリガー)
- Cloud Composer(Airflow) でDAGを起動
- Dataproc クラスタ起動 → PySparkジョブ実行(GCS→BigQuery)
- クラスタ自動削除(ephemeral構成)
このような構成により、コストを抑えつつ定期バッチ処理を安定して運用できます。
2. Hadoop由来のDataproc クラスタ
Dataprocクラスタは元々はHadoopクラスタをGCP上でマネージドに動かすためのサービスとしてスタートしました。
つまり、DataprocはHadoop互換のマネージドクラスタが原点です。
現在はSpark中心で使う構成が主流となっており、Hadoopそのもの(MapReduceやHDFS)を使わないケースも多いですが、ここではHadoop由来のDataproc クラスタについて解説します。
2.1.クラスタ構成要素
2.1.1.YARN ResourceManager
- クラスタ全体のリソース管理とジョブスケジューリングを担当
- Web UIでノードの状況やジョブ履歴を確認可能(SOCKSプロキシ経由)
2.1.2.HDFS NameNode
- HDFSファイルシステムのメタデータ(ファイル構造やブロック配置など)を管理
- 通常はmasterノード上で稼働
※DataprocではGCSをファイルシステム代替として使う構成も多いため、HDFSを使わない構成が主流です。
2.1.3.Graceful Decommission
Google Cloud Dataproc や Hadoop 環境における Graceful Decommission(優雅な撤去) とは、ノードを停止する際に、進行中の処理やデータをできるだけ安全に移動・保存した上でクラスターから削除する仕組みです。
よくある問題と対策:ノードが早く消えすぎる
Dataprocでは自動スケーリングポリシーにより、アイドル状態のワーカーを削除(decommission)することが可能です。
ただしこのgraceful decommission timeoutが短すぎると、ジョブ中にも関わらずノードが削除されてしまい、パフォーマンスが不安定になることがあります。
対策:タイムアウトを延長する
gracefulDecommissionTimeout: 2700s # = 45分
または、
gcloud dataproc clusters update your-cluster \
--graceful-decommission-timeout=45m
メリット
- ジョブ実行中はノードが保持される
- ジョブ完了後のみスケールインが実施され、コスト削減が可能
- ノードの途中削除が起きず、パフォーマンスが安定
2.2.Dataproc クラスタの構成ファイルの更新
Dataproc クラスタの構成ファイルを更新するためには、--properties フラグを使用し、以下のような形式でプロパティを指定します:
--properties file_prefix:property=value
2.3.ワーカーVMのローカルディスク構成
Dataprocクラスタ作成時、ワーカーノードのローカルディスクとして以下のオプションが選択可能です:
- 標準永続ディスク(HDD):コストを抑えたい場合に有効、速度は低め
- SSD永続ディスク:読み書きが高速、バランス型
- ローカルSSD:非常に高速。ただしサイズ制限があり、再起動でデータ消失(揮発性)
用途に応じたディスク選定が重要です。
3.Cloud Dataproc の Web UI アクセス方法
Dataprocのクラスタに含まれる以下のようなWeb UIにアクセスしたい場合:
- YARN ResourceManager
- Spark UI
- HDFS NameNode UI
これらは外部公開されておらず、プライベートネットワーク内にあります。そこで、SOCKSプロキシ経由でのSSHトンネリングが推奨されます。
gcloud compute ssh <your-cluster-master> -- -D 1080
上記のようにSOCKSプロキシを使い、ローカルのブラウザ経由でWeb UIへアクセス可能です。
※Spark UIもDataprocクラスタ上で動作していますが、これはYARNではなくSpark Applicationの内部構成を可視化するものです。
4.DataprocとBigQueryの連携活用
Dataprocで処理した結果をBigQueryに書き込むのはもちろん、BigQueryから読み込んで差分比較や同一性検証なども可能です。たとえば、ETLをBigQueryに移行する際、DataprocのPySparkジョブでBigQueryの出力を比較して結果の同一性を確認することができます。
5.コスト最適化:プリエンプティブルVMの活用
Dataprocでは、プリエンプティブルVM(Preemptible VM)を活用することで、最大80%のコスト削減が可能です。
- 例:週1回30分程度のジョブ → 中断リスクが低く、コスト効果抜群
- ノード種別に応じて柔軟に選択可能
6.課金の仕組み
Cloud Dataproc は、使用した分単位で課金される minute-by-minute billing を採用しており、リソースを使用した分だけ正確に課金される仕組みです。これは、ジョブが短時間で完了する一時的なクラスタ(ephemeral clusters)などのユースケースで特に有効です。
7.Spark MLlibとの連携
Dataproc上でApache SparkのMLlib(Machine Learning Library)を使えば、分散機械学習処理が可能になります。
- データ前処理、学習、評価までを並列実行
- GCSやBigQueryとの連携で大規模データも容易に処理可能
※Spark MLlibはSpark専用ライブラリであり、Hadoop MapReduceとは関係ありません。
8.Dataproc Serverless (for Spark)
ユーザーがクラスターを明示的に作らず、ジョブを投げると裏で自動的に必要なリソースが割り当てられる、別のサービス。