はじめに
- データエンジニアリングまわりを復習したときのメモです。
- Webアプリから発生するデータを使ってモデルを継続的に学習させるためのデータ基盤を想定しています。
データエンジニアリング導入以前ver
概要
- CSVファイル
- PoC時点などのシンプルな実装だと、サーバ腹持ちCSVファイルのみでデータを管理する、ということもあると思います
- リレーショナルデータベース(RDB)
- 同時実行制御・耐障害性
- 一貫性・拡張性・信頼性・速度
関連技術要素
- 【CSV】pandas, etc
- 【RDB】PostgreSQL, MySQL, etc
課題
- Webアプリケーションデータベースとは疎にしたい(分ければ良いが)
- 性能が出ない
- 統合データ環境として作られていると、分析用途のクエリは性能が出にくい(アドホックな分析を想定して設計されていない)
- インフラコストが高い
- 利用するデータを格納する→事前に必要になりそうなデータをとにかく集めておく
データウェアハウス導入ver
概要
- データウェアハウス
関連技術要素
- 【DWH】BigQuery(GCP)
- コスト
- マルチテナント方式であるため、事前のプロビジョニングのコストが発生しない
- コンピュートまたはストレージのどちらか大きいほうのピークに合わせてサイジング調整する必要などがない
- クエリでスキャンした容量に対して課金
- カラム指向ストレージなので、LIMITは意味なし
- デフォルトで作られるキャッシュテーブル(24h)は、スキャン料金の対象にならない
- マルチテナント方式であるため、事前のプロビジョニングのコストが発生しない
- データ取り込み
- バルクロード: BigQuery Data Transfer Service, など
- ストリーミング挿入: Fluentd, Dataflowのコネクタ, StriimなどのCDCソリューション(MySQLなどと同期)
- フェデレーション: 外部テーブルを指定
- データマート用途での利用
- 1レコード500バイトと仮定すると、1千万レコードで5GBで、それくらいならRDBをデータマートにしても良い?
- cdc
- コスト
課題
- 非構造化データを扱うことが増えてきている
- 顧客接点のデジタル化
- 「2025年までに、全世界のデータのうち80%が非構造化データを占めるようになる」
データレイク導入ver
構成イメージ
概要
- データレイク
- 未加工のデータを収集して蓄積するための場所
- 「データを中心としたアーキテクチャとなっており、データのサイロが最小化され、スケーラブルな分散環境でデータの処理が互いに干渉し合うことなく実行される場所」
- データマート
- ストリーミング処理
- ETL
- 1ファイルあたり128MB-512MBが良い
- パーティション含めたデータの持ち方の設計が大事
- ワークフロー管理
- 処理の依存関係を制御、処理のタイミングを適切にコントロールする
- メタデータ管理
- データリネージ
- あるデータがどのデータからどういう過程を経て作られたか
- データリネージ
関連技術要素
- 【データレイク】S3
- オブジェクトストレージに格納するデータは、1MB~1GBくらいが良い
- 【ストリーミング処理】Fluentd
- 【ストリーミング処理】Kafka
- 【ストリーミング処理】Pub/Sub(GCP)
- データ量の急なバーストに耐え得るスケーラビリティ
- 【ストリーミング処理】Dataflow
- 【ストリーミング処理】Kinesis Data Firehose
- CloudWatch Logsのサブスクリプションフィルタと併用
- 配信先をS3に設定できる
- 違い
- 【ETL】DataProc(GCP)
- 【ETL】Glue(AWS)
- DataCatalogとETLという2つのコンポーネントから構成されるサービス
- 「S3のデータファイルから、AWS Redshift Spectrum と AWS Athenaのテーブルを作成する」ツール
- Glueでデータカタログと呼んでいるテーブル定義は、Apache Hive のTableのことで、 Glueは、S3のファイルから、Hive Tableを作るツール
- Glueはクローリングによるテーブル定義作成・更新に加えて、Apache Sparkを使って、プログラミングにより、ユーザーがより細かくデータ加工することもできます。
- AWS GlueのジョブにはSparkとPython Shellの2つのジョブタイプがあります。
- データの圧縮やParquet変換
- マスキングやパーティション化
- 【ETL】Athena(AWS)
- 【ワークフロー管理】CloudComposer
- Airflowに必要なコンポーネントが自動で起動する
- GKE
- GCS
- CloudLogging
- CloudMonitoring
- CloudSQL(バックエンドDB)
- Airflowに必要なコンポーネントが自動で起動する
- 【メタデータ管理】DataCatalog(GCP)
- GCSのデータやBQのデータを横断的に検索・管理することができる