書籍概要

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 ビッグデータと機械学習の関係 ……データを使って価値を生み出す

サポート

正誤表

本書の以下の部分に誤りがありました。ここに訂正するとともに,ご迷惑をおかけしたことを深くお詫び申し上げます。

(2017年10月10日最終更新)

P.96 Tip「YARNコンテナ」内,上から2〜3行め

YARNにおけるコンテナはOSレベルの仮想化技術ではなく、どのホストでどのプロセスを走らせるかを決めるアプリケーションレベルの技術です。
YARNにおけるコンテナは、Dockerコンテナのようにすべてのリソースを仮想化して隔離するものとは違って、CPUやメモリなどの使用量のみを制限します

YARNコンテナもOSの仮想化技術を用いているとのこと。加えて,現在のYARNはDockerコンテナを使ってプログラムを実行できるようにもなっているようです。

P.119 Column「Mesosによるリソース管理」内,上から3〜4行め

YARNと比べるとより厳密なリソース制御を行います。 ... Linuxコンテナ(LXC)が用いられ
分散アプリケーションを隔離するために厳密なリソース制御を行います。 ... Linuxのコンテナ技術が用いられ

MesosやDockerはかつてLXCを利用していたものの,本書執筆時点で既に利用されなくなっているとのことで訂正。

P.150 見出し「重複排除は高コストなオペレーション」内,上から3行め

分散システムではシーケンス番号はあまり使われません。
メッセージ配送における重複排除ではシーケンス番号はあまり使われません。

ここでは重複排除におけるシーケンス番号の利用について論じています。本書では取り上げられませんでしたが,実際にはシーケンス番号が利用されるケースもあり,例えば2017年6月28日にリリースされたApache Kafka 0.11では,シーケンス番号を利用した重複排除が実装されたようです。
参考:
https://www.confluent.io/blog/exactly-once-semantics-are-possible-heres-how-apache-kafka-does-it/


(以下,2017年9月25日更新)

以下,第2刷以降,電子版では修正済み
P.81 下から4行め

正規化によって分解さている
正規化によって分解さている

P.267 リスト6.14の続き 上から3行め〜4行め


LOAD = '''

<省略>


LOAD = '''

STORED AS TEXTFILE LOCATION '/tmp/twitter_sample_{{ ds }}/';
<省略>


(以下,2017年9月19日更新)

P.29 ページ下方の,実行例の最終行


[1891714 rows x 5 columns]


[1891714 rows x 4 columns]

P.80 図2.19

誤

正


(以下,2017年9月12日更新)

(電子版では修正済み)

P.28 ページ下方の実行例内


In [1]: import pandas as pd
      : pd.DataFrame([['2017-01-01', 'x', 1], ['2017-01-01', 'y', 2]])


In [1]: import pandas as pd
      : pd.DataFrame([['2017-01-01', 'x', 1], ['2017-01-02', 'y', 2]])

商品一覧