「ビッグデータ」をテーマに、データ分析基盤技術をまとめた解説書。
AIの発展、コンテナ技術の進歩をはじめ、ビッグデータを取り巻く技術が大きく変わり始めました。ビッグデータの技術には、元々大きく分けて2つのバックグラウンドがありました。一つは業務系システムで、RDB(Relational Database)から取り出したデータをバッチ処理して役立つ情報を提供する。もう一つはWeb/IoT系システムで、RDBでは扱いきれない大量のログを分散システムを使い、データ処理をする。この2つの流れが融合し、膨大なデータを収集/変換し、分析/可視化するための一連の基盤システムの重要度は格段に上がりました。さらに昨今のAI/機械学習の台頭で、新たな潮流が生まれています。
本書では、ビッグデータを支える基盤技術の「今」に焦点を当て、前半ではデータ量や分散処理など基本概念の整理と、代表的なテクノロジーを徹底解説。合わせて、各技術登場の歴史的な背景も丁寧に追います。後半は実践編としてオープンソースや無償版が利用できるソフトウェアを中心にラップトップ1台でビッグデータを体験しながら学べるよう解説を進めます。今回の改訂では、ビッグデータの技術を活用した応用分野のうち注目度の高い機械学習や特徴量ストア、MLOpsの話題も新たに盛り込み、充実の内容でお届けします。
■第1章 ビッグデータの基礎知識
# 1.1 [背景]ビッグデータの定着
## 分散システムによるデータ処理の高速化 ……ビッグデータの扱いづらさを乗り越える二大技術
## 分散システムのビジネス利用の開拓 ……データウェアハウスとの共存
## 自分でできる! データ分析の間口の広がり ……クラウドサービスとデータディスカバリで加速したビッグデータ活用
## 新しい分散データ処理システムの台頭 ……Hadoopからの脱却
## ビッグデータを活用した応用分野の広がり ……レポーティング、デジタルマーケティング、人工知能
# 1.2 ビッグデータ時代のデータ分析基盤
## [再入門]ビッグデータの技術 ……分散システムを活用してデータを加工していくしくみ
## データウェアハウスとデータマート ……データパイプラインの基本形
## データレイク ……あらゆるデータをそのまま貯蔵
## データ分析基盤を段階的に発展させる ……チームと役割分担、スモールスタートと拡張
## データを集める目的 ……「検索」「加工」「可視化」の3つの例
## 確証的データ解析と探索的データ解析
# 1.3 [速習]スクリプト言語によるアドホック分析とデータフレーム
## データ処理とスクリプト言語 ……人気のPythonと、データフレーム
## データフレーム、基礎の基礎 ……「配列の配列」から作成
## Webサーバーのアクセスログの例 ……pandasのデータフレームで簡単処理
## 時系列データを対話的に集計する ……データフレームをそのまま用いてデータ集計
## SQLの結果をデータフレームとして活用する
# 1.4 BIツールとモニタリング
## スプレッドシートによるモニタリング ……プロジェクトの現状を把握する
## データに基づく意思決定 ……KPIモニタリング
## 変化を捉えて詳細を理解する ……BIツールの活用
## 手作業と自動化すべきこととの境界を見極める
# 1.5 まとめ
■第2章 ビッグデータの探索
# 2.1 基本のクロス集計
## トランザクションテーブル、クロステーブル、ピボットテーブル ……クロス集計の考え方
## ルックアップテーブル ……テーブルを結合して属性を増やす
## SQLによるテーブルの集約 ……大量データのクロス集計の事前準備
## データ集約→「データマート」→可視化 ……システム構成はデータマートの大きさで決まる
# 2.2 列指向ストレージによる高速化
## データベースの遅延を小さくする
## 列指向データベースのアプローチ ……カラムを圧縮してディスクI/Oを減らす
## MPPデータベースのアプローチ ……並列化によってマルチコアを活用する
# 2.3 アドホック分析と可視化ツール
## Jupyter Notebookによるアドホック分析 ……ノートブックに分析過程を記録する
## ダッシュボードツール ……定期的に集計結果を可視化する
## BIツール ……対話的なダッシュボード
# 2.4 データマートの基本構造
## 可視化に適したデータマートを作る ……OLAP
## テーブルを非正規化する
## 多次元モデル ……可視化に備えてテーブルを抽象化する
# 2.5 まとめ
■第3章 ビッグデータの分散処理
# 3.1 大規模分散処理のフレームワーク
## 構造化データと非構造化データ
## Hadoop ……分散データ処理の共通プラットフォーム
## Spark ……インメモリ型の高速なデータ処理
# 3.2 クエリエンジン
## データマート構築のパイプライン
## Hiveによる構造化データの作成
## 対話型クエリエンジンPrestoのしくみ ……Prestoで構造化データを集計する
## データ分析のフレームワークを選択する ……MPPデータベース、Hive、Presto、Spark
# 3.3 データマートの構築
## ファクトテーブル ……時系列データを蓄積する
## サマリーテーブル ……レコード数を削減する
## スナップショットテーブル ……マスタの状態を記録する
## 履歴テーブル ……マスタの変化を記録する
## [最終ステップ]ディメンションを追加して非正規化テーブルを完成させる
# 3.4 まとめ
■第4章 ビッグデータの蓄積
# 4.1 バルク型とストリーミング型のデータ収集
## オブジェクトストレージとデータインジェスション ……分散ストレージにデータを取り込む
## バルク型のデータ転送 ……ETLサーバー設置の必要性
## ストリーミング型のメッセージ配送 ……次々と送られてくる小さなデータを扱うために
# 4.2 [性能×信頼性]メッセージ配送のトレードオフ
## メッセージブローカ ……ストレージの性能問題を解決する中間層の設置
## メッセージ配送を確実に行うのは難しい ……信頼性の問題と3つの設計方式
## 重複排除は高コストなオペレーション
## データインジェスションのパイプライン ……長期的なデータ分析に適したストレージ
# 4.3 時系列データの最適化
## プロセス時間とイベント時間 ……データ分析の対象はおもにイベント時間
## プロセス時間による分割と問題点 ……極力避けたいフルスキャン
## 時系列インデックス ……イベント時間による集計の効率化①
## 述語プッシュダウン ……イベント時間による集計の効率化②
## イベント時間による分割 ……テーブルパーティショニング、時系列テーブル
# 4.4 非構造化データの分散ストレージ
## [基本戦略]NoSQLデータベースによるデータ活用
## 分散KVS ……ディスクへの書き込み性能を高める
## ワイドカラムストア ……構造化データを分散して格納する
## ドキュメントストア ……スキーマレスデータを管理する
## 検索エンジン ……キーワード検索でデータを絞り込む
# 4.5 まとめ
■第5章 ビッグデータのパイプライン
# 5.1 ワークフロー管理
## [基礎知識]ワークフロー管理 ……データの流れを一元管理する
## エラーからのリカバリー方法を先に考える
## 冪等な操作としてタスクを記述する ……同じタスクを何度実行しても同じ結果になる
## ワークフロー全体を冪等にする
## タスクキュー ……リソースの消費量をコントロールする
# 5.2 バッチ型のデータフロー
## MapReduceの時代は終わった ……データフローとワークフロー
## MapReduceに代わる新しいフレームワーク ……DAGによる内部表現
## データフローとワークフローとを組み合わせる
## データを取り込むフロー
## データを書き出すフロー
## データフローとSQLとを使い分ける ……データウェアハウスのパイプラインとデータマートのパイプラン
# 5.3 ストリーミング型のデータフロー
## バッチ処理とストリーム処理とで経路を分ける
## ストリーム処理とバッチ処理とを統合する
## ストリーム処理の結果をバッチ処理で置き換える ……ストリーム処理の二つの問題への対処
## アウトオブオーダーなデータ処理
# 5.4 まとめ
■第6章 ビッグデータと機械学習
# 6.1 特徴量ストア
## 機械学習のための特徴量ストア
## 特徴量ストアによるデータ管理
## 特徴量ストアの実装例
# 6.2 MLOps
## 機械学習のためにデータパイプラインを構築する
## MLOpsの全体構成 ……三段階の発展
## MLOpsと特徴量ストア
## Kubeflow ……機械学習のオーケストレーション
## その他の機能 ……Metadata、Katib、Tools for Servingなど
# 6.3 まとめ
■第7章 [実践]ビッグデータ分析基盤の構築
# 7.1 ノートブックとアドホック分析
## 学習にあたって
## サンプルデータの内容 ……5分ごとの気温
## 作業環境の構築 ……MultipassでUbuntu 20.04を起動する
## PythonスクリプトによるCSVファイルの収集
## データの内容を確認する ……pandas
## Sparkによる分散環境を整える
## 可視化によるデータ検証 ……Tableau Public
# 7.2 バッチ型のデータパイプライン
## Dockerによる環境構築 ……ラップトップ上での開発環境
## オブジェクトストレージ ……MinIO
## 構造化データの管理 ……Hiveメタストア
## オブジェクトストレージへのデータ転送
## ETLプロセス ……Spark
## クエリエンジンによるデータ集計 ……Presto
## ダッシュボードツールによる可視化 ……Metabase
## 特徴量エンジニアリング ……SQLとSpark
# 7.3 ワークフロー管理ツールによる自動化
## Prefect ……スクリプト型のワークフロー管理
## バッチ型のデータパイプラインを定義する
## 本番環境におけるワークフロー管理
## ワークフローのオーケストレーション ……ロジックと構成定義とを分離する
## 作業環境の削除 ……multipass delete
# 7.4 まとめ