[書評]ビッグデータを支える技術―刻々とデータが脈打つ自動化の世界
本書はビッグデータを取り扱う基本的な技術についてまとめた本です。基本的な考え方や探索と蓄積、そしてビッグデータの分散処理や分析基盤などについてを網羅的に解説しています。ビッグデータの取り扱いや背景などがわかりやすく解説されています。
分散処理
ビッグデータに置いて特に問題になるのは高速化です。どんなに大規模なデータを集めたところで、それを許容できる時間内で扱うことができないと意味がないです。高速化をするために考えられたのが分散処理です。分散処理を扱うものとしてHadoopが紹介されています。それを支える技術としてMapReduceの解説があります。しかし、本書でも指摘されていますが、オーバーヘッドが大きいため、MapReduceの時代は終わりつつあります。これに変わる技術としてSparkの紹介がされています。Sparkはより大規模なデータを扱えるようになりました。これとBIツールを組み合わせることで、データを可視化することにより、分析基盤の構築をする方法について解説しています。
また、データの蓄積や取得のためにNoSQLデータベースも紹介されています。こちらはキーバリューストア、ドキュメントストア、ワイドカラムストアなど、様々なデータ構造を取り扱えます。RDBよりも高速で分散処理に優れますが、NoSQLは様々なデータベースがあり、これは目的に応じて選ぶ必要があります。HadoopとNoSQLを組み合わせてビッグデータを取り扱うのが、2012年以降一般的になっています。
パイプライン
データの流れを一元管理する手法をワークフローといい、本書ではAirflowやOozieなどが紹介されています。定期的な処理を自動化することと、異常を検知してその解決をサポートすることが主な役割です。ビッグデータににおいては特にエラーからのリカバリーが特に重要になります。ビッグデータではエラーの発生が日常茶飯事で、それがそのような問題であっても再実行できないといけません。なので、エラーが起こってもリトライをするようにフローを組む必要がありますが、そのリトライも問題があります。回数が少ないとそもそもタスクが上手くいかず、多すぎると、最終的な失敗の通知が遅くなり、問題の発覚が遅くなります。タスクに応じて回数を考える必要があることを本書は解説しています。
ワークフローの中で、データを分散システムの内部で処理することをデータフローといいます。これは主にSparkで実現することができます。生のデータはほとんど価値がなく、それを構造化して分析できる形にするのが主な役割です。このデータフローはバッチ処理とストリーミング処理の2つの手法があります。こちらは互いの欠点を補い合う相補関係にあるので、目的に応じて使い分ける必要があります。このデータフローとワークフローを上手く組み合わせることが重要であると本書は説明しています。
まとめ
単なる技術紹介だけでなく、その技術の背景や考え方についても解説があり、とても面白く読めました。また、コラムでは現実で直面する問題についての取り扱い方もありますのでとても参考になる本だと思います。