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

本日読了。

データ分析ではなくデータ処理に焦点をあてた、あまり類書が無い貴重なビッグチデータ本。
基本的なデータパイプラインは、データソース〜データレイク〜データマート。
データソースからのデータ蓄積には、バルク型とストリーム型がある。ストリームはメッセージブローカを介する。メッセージブローカからコンシューマがPULLする。その際、at most once、at least once、exactly onceの種別を意識する。excactly onceはアプリ側で対処するほうが楽。時系列データについてはプロセス時間とイベント時間を意識する。本来的にはイベント時間で処理すべきだが、かなり遅れてデータが到着し、アウトオブオーダー処理が必要になる場合がある。
データレイクは非構造化データやスキーマレスデータをそのまま蓄積できる。代表的なものはHadoop。クエリエンジンはHive/MapReduceかSpark。
データマートはRDBや列指向DBにより高速にダッシュボードによる見える化やBIツールによるアドホック分析ができるようにする。関連データをジョインすることで非正規化し高速に検索ができるようにする。カーディナリティ(データが取りうる値の種類)を小さくすることで、圧縮できる。
バッチ処理のパイプライン全体の動作はワークフロー管理により、実行〜エラーリカバリが行われる。エラーリカバリは手動になることが多い。リカバリしても問題無いように、冪等な動作にしておくとよい。
バッチ型のデータフローではMapReduceは古く、DAG(Directed Acyclic Graph)と呼ばれるデータ構造で記述する。Sparkが代表。短時間はストリーム処理、長時間はバッチ処理を組み合わせ、最終的にはバッチ処理で確定情報が上書きされるアーキテクチャをラムダアーキテクチャと呼ぶ。ストリーム処理1本にして、アウトオブオーダーな処理が発生したら再度ストリームに入れ直すのを、カッパアーキテクチャと呼ぶ。