WEB+DB PRESS plusシリーズビッグデータを支える技術
――刻々とデータが脈打つ自動化の世界

書籍の概要

この本の概要

多彩な技術の集合体。
ビッグデータの今。

スマホで買い物をして,翌日には届けてもらえる。
たとえば,このような身近な場面でも,背後では決済/在庫管理/配送をはじめとした複数のシステムが連携して動いています。

コンピュータの性能向上に伴い,機械学習をはじめとした,データを活かすシステム開発への期待は高まる一方です。
今後,システム規模の大小を超えて「データ処理そのものをシステムの一部とする」技術への需要は増していくでしょう。

データ処理をどのようにシステム化するか。
本書ではこのエンジニアリングの問題に主軸を置き,可視化を例に,一連のデータ処理に必要な要素技術を整理しデータを効率良く扱うための土台を作り,その上でシステムの自動化をサポートする種々の技術を追っていきます。

こんな方におすすめ

  • データ処理基盤/ビッグデータを扱うエンジニアの方々
  • 作業を自動化したいとお考えのデータサイエンティストの方々
  • 広くデータを扱う業務に携わる方々で,データ処理の効率化について知りたい方々
  • 「データ処理のシステム開発とはどのようなものか」に関心のある方々

本書に関するお知らせ

本書に関連する記事を公開しております。

この書籍に関連する記事があります!

今を知りたい! ビッグデータの基礎知識
データを用いたシステム開発が増えてきています。最近であれば人工知能技術の盛り上がりなどもあり,慣れないデータ処理に苦心している人も多いのではないでしょうか。

目次

第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)がある。