目次
第1章 ビッグデータの基礎知識
1.1 [背景]ビッグデータの定着
- 分散システムによるデータ処理の高速化 ……ビッグデータの扱いづらさを乗り越える二大技術
- ビッグデータ技術への要求 ……HadoopとNoSQLの台頭
- Hadoop ……多数のコンピュータで大量のデータ処理
- NoSQLデータベース ……頻繁な読み書き&分散処理に強みあり
- HadoopとNoSQLデータベースの組み合わせ ……現実的なコストで大規模データ処理を実現
- 分散システムのビジネス利用の開拓 ……データウェアハウスとの共存
- 自分でできる! データ分析の間口の広がり ……クラウドサービスとデータディスカバリで加速したビッグデータ活用
- Column スモールデータ&ビッグデータの活用 ……スモールデータの技術も重要
- データディスカバリの基礎知識 ……セルフサービスのBIツール
1.2 ビッグデータ時代のデータ分析基盤
- [再入門]ビッグデータの技術 ……分散システムを活用してデータを加工していく仕組み
- データパイプライン ……データ収集からワークフロー管理まで
- データ収集 ……バルク型とストリーミング型のデータ転送
- ストリーム処理とバッチ処理
- 分散ストレージ ……オブジェクトストレージ,NoSQLデータベース
- 分散データ処理 ……クエリエンジン,ETLプロセス
- ワークフロー管理
- データウェアハウスとデータマート ……データパイプラインの基本形
- データレイク ……あらゆるデータをそのまま貯蔵
- データレイクとデータマート ……必要なデータはデータマートにまとめる
- データ分析基盤を段階的に発展させる ……チームと役割分担,スモールスタートと拡張
- アドホック分析とダッシュボードツール
- Column データパイプラインの大きな流れは変わらない
- データマートとワークフロー管理
- データを集める目的 ……「検索」「加工」「可視化」の3つの例
- データの検索
- データの加工
- データの可視化
- Column 基幹系システムと情報系システムを分離しよう
- 確証的データ解析と探索的データ解析
1.3 [速習]スクリプト言語によるアドホック分析とデータフレーム
- データ処理とスクリプト言語 ……人気のPythonと,データフレーム
- データフレーム,基礎の基礎 ……「配列の配列」から作成
- Webサーバーのアクセスログの例 ……pandasのデータフレームで簡単処理
- データの前処理で使えるpandasの関数
- 時系列データを対話的に集計する ……データフレームをそのまま用いてデータ集計
- Column スモールデータの技術をうまく使っていく
- SQLの結果をデータフレームとして活用する
- 実行結果を確認するところではデータフレームを使う
1.4 BIツールとモニタリング
- スプレッドシートによるモニタリング ……プロジェクトの現状を把握する
- データに基づく意思決定 ……KPIモニタリング
- 月次レポート ……スプレッドシートによるレポート作成とその限界
- 変化を捉えて詳細を理解する ……BIツールの活用
- モニタリングの基本戦略とBIツール ……定期的なレポートによる変化の把握と再集計
- Tip BIツールは,自分でデータを見るために。
- 手作業と自動化すべきこととの境界を見極める
- 手作業で済むことは手作業で済ませる
- 自動化したいときにはデータマートを作る
1.5 まとめ
第2章 ビッグデータの探索
2.1 基本のクロス集計
- トランザクションテーブル,クロステーブル,ピボットテーブル ……クロス集計の考え方
- ピボットテーブル機能によるクロス集計
- ルックアップテーブル ……テーブルを結合して属性を増やす
- BIツールによるクロス集計
- pandasによるクロス集計
- SQLによるテーブルの集約 ……大量データのクロス集計の事前準備
- Column テーブルの縦横変換❶[SQL編]
- Column テーブルの縦横変換❷[pandas編]
- データ集約➡「データマート」➡可視化 ……システム構成はデータマートの大きさで決まる
2.2 列指向ストレージによる高速化
- データベースの遅延を小さくする
- データ処理の遅延 ……遅延の小さいデータマート作成のための基礎知識
- 「圧縮」と「分散」によって遅延を小さくする ……MPPの技術
- 列指向データベースのアプローチ ……カラムを圧縮してディスクI/Oを減らす
- Column スループットとレイテンシ
- 行指向データベース ……各行がディスク上で一連のデータとして書き込まれる
- 列指向データベース ……カラムごとにデータをまとめておく
- MPPデータベースのアプローチ ……並列化によってマルチコアを活用する
- MPPデータベースと対話型クエリエンジン
- Column リソース消費を制限する ……列指向ストレージ×MPPによる高速化と注意点
2.3 アドホック分析と可視化ツール
- Jupyter Notebookによるアドホック分析 ……ノートブックに分析過程を記録する
- ノートブック内での可視化
- ノートブックによるワークフロー ……一連のタスクをまとめて実行
- Tip ノートブックの共有
- ダッシュボードツール ……定期的に集計結果を可視化する
- Redash ……SQLによるクエリの実行結果をそのまま可視化
- Column データマートは必要なくなるか?
- Superset ……画面上でマウス操作によってグラフを作る
- Column CSVファイルによる簡易的なデータマート
- Kibana ……Elasticsearchのフロントエンドでリアルタイムに作成
- Column 可視化ツールの選択の指針 ……どれを使う?
- BIツール ……対話的なダッシュボード
- 1つのデータを多角的に分析する
2.4 データマートの基本構造
- 可視化に適したデータマートを作る ……OLAP
- 多次元モデルとOLAPキューブ
- MPPデータベースと非正規化テーブル
- テーブルを非正規化する
- ファクトテーブルとディメンジョンテーブル
- スタースキーマと非正規化 ……ファクトテーブルを中心に複数のディメンジョンテーブルを結合
- 非正規化テーブル ……データマートに正規化は必要ない
- Tip データウェアハウスとスタースキーマ
- 多次元モデル ……可視化に備えてテーブルを抽象化する
- モデルの定義を拡張する
- Column ブレイクダウン分析
2.5 まとめ
第3章 ビッグデータの分散処理
3.1 大規模分散処理のフレームワーク
- 構造化データと非構造化データ
- スキーマレスデータ ……基本書式はある,スキーマは定めない
- データ構造化のパイプライン ……テーブル形式にして列指向ストレージに長期保存
- 列指向ストレージの作成 ……分散ストレージ上に作成して効率良くデータ集計
- Hadoop ……分散データ処理の共通プラットフォーム
- 分散システムのコンポーネント ……HDFS,YARN,MapReduce
- 分散ファイルシステムとリソースマネージャ ……HDFS,YARN
- Tip YARNコンテナ
- 分散データ処理とクエリエンジン ……MapReduce,Hive
- Hive on Tez
- Tip Hive on Spark
- 対話型クエリエンジン ……ImpalaやPresto
- Spark ……インメモリ型の高速なデータ処理
- MapReduceを置き換える ……Sparkの位置付け
3.2 クエリエンジン
- データマート構築のパイプライン
- Hiveによる構造化データの作成
- 列指向ストレージへの変換 ……データ集計の高速化(バッチ型クエリエンジン向け)
- Hiveで非正規化テーブルを作成する
- サブクエリ内でレコード数を削減する ……早い段階でファクトテーブルを小さくする
- データの偏りを避ける ……分散システムの性能発揮のために
- Tip ベストプラクティス
- 対話型クエリエンジンPrestoのしくみ ……Prestoで構造化データを集計する
- プラグイン可能なストレージ ……1つのクエリの中から複数のデータソースに接続可能
- CPU処理の最適化 ……読み込みもコードも並列実行
- Tip Prestoのリソース管理
- インメモリ処理による高速化 ……クエリ実行には極力,対話型クエリエンジンを
- 分散結合とブロードキャスト結合
- 列指向ストレージの集計 ……Prestoによる高速集計
- データ分析のフレームワークを選択する ……MPPデータベース,Hive,Presto,Spark
- MPPデータベース ……完成した非正規化テーブルの高速集計に向いている
- Hive ……データ量に左右されないクエリエンジン
- Presto ……速度重視&対話型特化のクエリエンジン
- Spark ……分散システムを使ったプログラミング環境
- Column Mesosによるリソース管理
3.3 データマートの構築
- ファクトテーブル ……時系列データを蓄積する
- テーブルパーティショニング ……物理的なパーティションに分割
- データマートの置換
- Tip データ量を最初に見積もる
- サマリーテーブル ……レコード数を削減する
- スナップショットテーブル ……マスタの状態を記録する
- Column サマリーテーブルからの数値計算に注意
- Column スナップショットの日付に注意
- Tip スナップショット時に非正規化する
- 履歴テーブル ……マスタの変化を記録する
- [最終ステップ]ディメンジョンを追加して非正規化テーブルを完成させる
- データ集約の基本形
3.4 まとめ
第4章 ビッグデータの蓄積
4.1 バルク型とストリーミング型のデータ収集
- オブジェクトストレージとデータインジェスション ……分散ストレージにデータを取り込む
- データインジェスション
- バルク型のデータ転送 ……ETLサーバー設置の必要性
- ファイルサイズの適正化は比較的簡単
- データ転送のワークフロー ……ワークフロー管理ツールとの親和性
- ストリーミング型のメッセージ配送 ……次々と送られてくる小さなデータを扱うために
- Webブラウザからのメッセージ配送 ……Fluentd,Logstash,Webイベントトラッキング
- Column Fluentdによるメッセージ配送
- モバイルアプリからのメッセージ配送 ……MBaaS,SDK
- デバイスからのメッセージ配送 ……MQTTを例に
- メッセージ配送の共通化 ……異なる部分と共通する部分を分離して考える
4.2 [性能×信頼性]メッセージ配送のトレードオフ
- メッセージブローカ ……ストレージの性能問題を解決する中間層の設置
- プッシュ型とプル型 ……スケーラビリティ向上とファイルサイズ適正化
- メッセージルーティング
- メッセージ配送を確実に行うのは難しい ……信頼性の問題と3つの設計方式
- at most once
- exactly once
- at least once ……重複排除は利用者に任されている
- Tip 信頼性のないメッセージ配送
- 重複排除は高コストなオペレーション
- オフセットを用いた重複排除
- ユニークIDによる重複排除
- エンドツーエンドの信頼性
- ユニークIDを用いた重複排除の方法 ……NoSQLデータベース,SQL
- データインジェスションのパイプライン ……長期的なデータ分析に適したストレージ
- 重複を考慮したシステム設計 ……ビッグデータシステムにおける「重複」の考え方
- Column メッセージブローカと信頼性
4.3 時系列データの最適化
- プロセス時間とイベント時間 ……データ分析の対象はおもにイベント時間
- プロセス時間による分割と問題点 ……極力避けたいフルスキャン
- 時系列インデックス ……イベント時間による集計の効率化❶
- 述語プッシュダウン ……イベント時間による集計の効率化❷
- Tip 頻繁な書き込みは最適化の効果を下げる
- イベント時間による分割 ……テーブルパーティショニング,時系列テーブル
- データマートをイベント時間で並び替える
4.4 非構造化データの分散ストレージ
- [基本戦略]NoSQLデータベースによるデータ活用
- 分散KVS ……ディスクへの書き込み性能を高める
- Amazon DynamoDB
- Tip DynamoDB StreamsとKinesis Stream
- Column [基礎知識]ACID特性とCAP定理
- ワイドカラムストア ……構造化データを分散して格納する
- Apache Cassandra
- ドキュメントストア ……スキーマレスデータを管理する
- Tip RDBとドキュメントストア
- MongoDB
- 検索エンジン ……キーワード検索でデータを絞り込む
- Column フルスキャンによる全文検索
- Elasticsearch
- Tip ドキュメントストアとしてのElasticsearch
- Splunk
- Column モバイル機器の時計は狂っている(!?) ……壊れたデータは除外する
4.5 まとめ
第5章 ビッグデータのパイプライン
5.1 ワークフロー管理
- [基礎知識]ワークフロー管理 ……データの流れを一元管理する
- ワークフロー管理ツール
- ワークフロー管理ツールとタスク
- 基本機能とビッグデータで求められる機能
- 宣言型とスクリプト型 ……ワークフロー管理ツールの種類
- Column 自家製のワークフロー管理ツール
- エラーからのリカバリー方法を先に考える
- リカバリーとフローの再実行
- Column ワークフローのバージョン管理
- Tip タスクをなるべく小さく保つ
- リトライ ……何度も繰り返すエラーは自動化したい
- バックフィル ……一定期間のフローを連続して実行する仕組み
- 冪等な操作としてタスクを記述する ……同じタスクを何度実行しても同じ結果になる
- アトミック操作
- 冪等な操作 ……追記と置換
- 冪等な追記
- Column タスク内部でのリトライ制御
- アトミックな追記
- ワークフロー全体を冪等にする
- タスクキュー ……リソースの消費量をコントロールする
- ボトルネックの解消
- タスク数の適正化 ……大き過ぎず,小さ過ぎず,程良く分割
5.2 バッチ型のデータフロー
- MapReduceの時代は終わった ……データフローとワークフロー
- MapReduceの仕組み
- MapReduceに代わる新しいフレームワーク ……DAGによる内部表現
- SparkにおけるDAG
- データフローとワークフローとを組み合わせる
- データを取り込むフロー
- データを書き出すフロー
- データフローとSQLとを使い分ける ……データウェアハウスのパイプラインとデータマートのパイプラン
- 対話的なフロー ……アドホック分析のパイプライン
5.3 ストリーミング型のデータフロー
- バッチ処理とストリーム処理とで経路を分ける
- ストリーム処理とバッチ処理とを統合する
- Spark StreamingにおけるDAG
- Column ストリーム処理による1次集計
- ストリーム処理の結果をバッチ処理で置き換える ……ストリーム処理の二つの問題への対処
- ラムダアーキテクチャ ……バッチレイヤ,サービングレイヤ,スピードレイヤ
- カッパアーキテクチャ
- アウトオブオーダーなデータ処理
- 本来のデータの姿は「イベント時間」から得られる
- イベント時間ウィンドウイング
5.4 まとめ
第6章 ビッグデータ分析基盤の構築
6.1 スキーマレスデータのアドホック分析
- スキーマレスデータを収集する
- 試験環境の構築
- 対話的な実行環境の準備
- Column データ分析の環境を仮想化する ……Docker
- Sparkによる分散環境 ……データ量が増えても対応可能に
- MongoDBのアドホック集計
- テキストデータの加工 ……スクリプト言語の活用
- SparkプログラムにおけるDAGの実行
- データを集約してデータマートを構築する
- カーディナリティの削減 ……可視化のプロセスに効く
- Column pandasからCSVファイル以外の出力
- CSVファイルの作成 ……spark-csvライブラリ,pandasのデータフレーム
- BIツールでデータを可視化する
- Column デスクトップ型のBIツールとWeb型のBIツール
6.2 Hadoopによるデータパイプライン
- 日次のバッチ処理をタスク化する
- [タスク1]Embulkによるデータ抽出
- [タスク2]Hiveによるデータ構造化
- [タスク3]Prestoによるデータ集約
6.3 ワークフロー管理ツールによる自動化
- Airflow ……スクリプト型のワークフロー管理
- ワークフローの定義
- タスクの定義
- ワークフローをターミナルから実行する
- airflow test
- Column Pythonスクリプトをワークフローに組み込む
- airflow backfill
- スケジューラを起動してDAGを定期実行する
- エラーからのリカバリー
- スケジュールの設定
- Tip ワークフローの更新
- タスクが消費するリソースを制御する
- タスクの分散処理 ……リモートでワーカーを実行する
- Tip 一時ディレクトリ
- Hadoopのデータパイプラインを実行する
6.4 クラウドサービスによるデータパイプライン
- データ分析とクラウドサービスの関係
- Amazon Web Services
- Google Cloud Platform
- Treasure Data
- Digdag ……宣言型のワークフロー管理
- Column Amazon RedshiftとGoogle BigQueryの違い
6.5 まとめ
- Column ビッグデータと機械学習の関係 ……データを使って価値を生み出す