WEB+DB PRESS plus ビッグデータを支える技術 ――刻々とデータが脈打つ自動化の世界
- 西田圭介 著
 - 定価
 - 3,256円(本体2,960円+税10%)
 - 発売日
 - 2017.9.22[在庫なし]
 - 判型
 - A5
 - 頁数
 - 304ページ
 - ISBN
 - 978-4-7741-9225-3 978-4-7741-9268-0
 
概要
多彩な技術の集合体。
ビッグデータの今。
スマホで買い物をして、翌日には届けてもらえる。
たとえば、このような身近な場面でも、背後では決済/在庫管理/配送をはじめとした複数のシステムが連携して動いています。
コンピュータの性能向上に伴い、機械学習をはじめとした、データを活かすシステム開発への期待は高まる一方です。
今後、システム規模の大小を超えて「データ処理そのものをシステムの一部とする」技術への需要は増していくでしょう。
データ処理をどのようにシステム化するか。
本書ではこのエンジニアリングの問題に主軸を置き、可視化を例に、一連のデータ処理に必要な要素技術を整理しデータを効率良く扱うための土台を作り、その上でシステムの自動化をサポートする種々の技術を追っていきます。
こんな方にオススメ
- データ処理基盤/ビッグデータを扱うエンジニアの方々
 - 作業を自動化したいとお考えのデータサイエンティストの方々
 - 広くデータを扱う業務に携わる方々で、データ処理の効率化について知りたい方々
 - 「データ処理のシステム開発とはどのようなものか」に関心のある方々
 
目次
第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 ビッグデータと機械学習の関係 ……データを使って価値を生み出す
 
プロフィール
西田圭介
1976年兵庫生まれ。トレジャーデータ(株)に所属。著書に「Googleを支える技術 ……巨大システムの内側の世界」(技術評論社、2008)がある。