[増補改訂]ビッグデータを支える技術 --ラップトップ1台で学ぶデータ基盤のしくみ
書籍情報
発売日 : 2021年02月13日
著者/編集 : 西田 圭介
出版社 : 技術評論社
発行形態 : 単行本
書籍説明
内容紹介
どのようにデータ処理をシステム化するか。スモールデータで押さえる基本から実践に効くワークフローのコンテナ化まで実例でわかる現代的なデータ基盤。
目次
■第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 まとめ
# 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 まとめ
著者情報
西田 圭介
西田 圭介 Keisuke Nishidaフリーランスのソフトウェアエンジニア。複数のスタートアップで開発やデータ分析などを担当した。現在は趣味の開発にも勤しみつつ、執筆活動を続けている。著書に『Googleを支える技術 ……巨大システムの内側の世界』(技術評論社、2008)がある。
西田, 圭介, 1976-