JJUG CCC 2019 fall 発表資料です。 JJUG CCC 2019 fall: https://ccc2019fall.java-users.jp/ タイムテーブル: https://ccc2019fall.java-users.jp/timetable.html
BigQueryを用いたデータ分析基盤作成入門#jjug_ccc #ccc_m1a株式会社NewsPicks 西山浩太郎
View Slide
自己紹介- 西山 浩太郎- 株式会社NewsPicks- 有料会員向け機能開発- サーバーサイドエンジニア- Scala / Elm / Nuxt.js
これらのクラウドに共通していることは?
本日の流れ1. そもそもデータ基盤とは?2. なぜ BigQuery なのか?3. BigQuery にデータを投入するには?4. ETL の実装5. デモ6. まとめ
データ分析基盤とは?
なぜ BigQuery なのか?
なぜ BigQuery なの?- Redshift との比較- クラスターを管理するかしないか- Athena との比較- データをロードしてるかしてないか
BigQuery を使用するメリット- フルマネージド- スケールしやすい- 保存するデータの管理が必要ない- 安定してそこそこ速い- データをもともとロードしている- 従量課金なので使い方に気をつけていればコストを抑えられる- Scripting, ML などの機能
BigQuery を使用するデメリット- Multi Cloud はメンテナンスが大変- データスキャン容量に比例して課金額が増えていくので、頻繁にクエリを発行する場合はコストが気になるBigQueryで150万円溶かした人の顔 (https://qiita.com/itkr/items/745d54c781badc148bb9)より
BigQuery にデータを投入するには?
BigQueryにデータを投入する方法1. 読み込みジョブを使用して batch 単位でインポート● GCS や S3 からのファイル読み込み2. ストリーミングを使用してレコードごとにインポート● Fluetndからの取り込み● Dataflowからの取り込み● 他
読み込みジョブ1. メインで使っているデータベースの dump の取り込み● 1日1回など、定期的に行い、それほど更新しないもの
1. アクセスログ● ログ監視をBigQueryで行う場合2. 生配信動画番組の反応がみたい時● リアルタイムの視聴者数やコメント数ストリーミングhttps://medium.com/teads-engineering/give-meaning-to-100-billion-analytics-events-a-day-d6ba09aa8f44より
データの流れのイメージStack Driver Cloud PubSub Cloud Dataflow BigQueryBigQueryCloud Storage Cloud Function
今回関連するサービス- BigQuery- Cloud Storage- Cloud Pub/Sub- Cloud Dataflow- Stackdriver- Cloud functions
BigQuery- Standard SQL- マネージド- 従量課金- 分割テーブルを使用するとコスト削減- Redshift や Athena のような使われ方
Cloud Storage- 非構造化データを格納するストレージ- マネージド- AWS での S3 のようなもの- S3 等からの転送サービスがある
Cloud Pub/Sub- ストリーミング取り込み/配信サービス- マネージド- GCP 上のサービス間の連携に使われる- AWS での SNS のようなもの
Cloud Dataflow- ストリーミング / バッチ 処理のサービス- マネージド / オートスケーリング- Apache Beam SDK を使用- Java / Scala / Python / Go
Stackdriver- モニタリング、ロギングのサービス- マネージド- Cloud Watchのようなもの
Cloud Functions- サーバレス- AWS の Lambda のようなもの- 対応言語: Node, Go, Python
- Spark, Hadoop クラスタ- マネージド- AWS の EMR のようなもの(参考) Cloud Dataproc
Dataflow VS Dataprochttps://cloud.google.com/dataflow/?hl=jaより
データレイク構成- 生のデータを一箇所にまとめておく- 後々、必要に応じて DWH にデータを投入できるCloud StorageBigQuery Cloud DataflowCloud Function Cloud Dataproc
再実行性(冪等性)- 回復可能な作りにしておくこと- 特にstreaming処理の場合、生データを保存しなくても動くので注意
なるべくマネージドのサービスを使う- 運用が好きな人は少ない- 属人性の排除
ETL の実装
Apache Beam- Google 発のOSS- Dataflow, Spark 等、様々な場所で動く- Java, Python, Go- Batch 処理と streaming 処理両方に対応
Scio- Apache Beam と Google Cloud Dataflow の Scala API- GCP の様々なサービスと連携可能- Type Safe BigQuery
Spotify の人によると…?Scala Matsuri 2019 「Data processing at Spotify using Scio」 より
デモ
データの流れのイメージStack Driver Cloud PubSub Cloud Dataflow BigQueryCloud Storage
他にもこんな構成でもCloud PubSubCloud Storage Cloud Dataflow BigQuery
まとめ- コストや運用の観点も踏まえて、最適なDWHを選びましょう- GCP に限らず、データ基盤を作る際に注意することは意識しましょう● データレイク● 再実行性- なるべくマネージドのサービスを活用しましょう