こんにちは!やましー@データ活用クラウドエンジニア(@yamashi18041)です!
私はビッグデータを扱うためのデータ基盤を作る仕事をしています。
しかしまだ経験が浅く、ビッグデータを扱う基盤を構成するための技術要素を多く知っていないので、本書を読むことにしました。
読んでみると、まさに私の知りたかった、ビッグデータを扱うための技術要素についての基礎、実践、問題点とその解消法、ベストプラクティスなどがまとめられていて、かなり理解が深まりました。ビッグデータを扱いたいと考えているエンジニアには非常におすすめの一冊です。
本の概要
【書籍名】ビッグデータを支える技術 刻々とデータが脈打つ自動化の世界
【著者名】西田圭介
【出版社】技術評論社
【出版日】2017/10/5
【こんな時に】ビッグデータ技術要素を知りたい
【想定読者】
データ処理基盤/ビッグデータを扱うエンジニアの方々
作業を自動化したいとお考えのデータサイエンティストの方々
広くデータを扱う業務に携わる方々で,データ処理の効率化について知りたい方々
「データ処理のシステム開発とはどのようなものか」に関心のある方々
【キーワード】ビッグデータ、Hadoop、NoSQL、分散システム、パイプライン
【頁 数】283ページ
【目 次】
第1章 ビッグデータの基礎知識
第2章 ビッグデータの探索
第3章 ビッグデータの分散処理
第4章 ビッグデータの蓄積
第5章 ビッグデータのパイプライン
第6章 ビッグデータ分析基盤の構築
本書の紹介
本書のテーマは「自動化されたデータ処理」でビッグデータをどのようにシステム化してデータを取り込むかについて記載されており、データ分析など、どのようにデータを活用するかその手法については書かれていません。
その分システム化をする為に必要な技術要素を基礎となるソフトウェアやデータベース、プログラミング言語、可視化ツールなどの解説を行いデータを効率よく扱うための知識の下地を整え、その上で、「ワークフロー管理」や「ストリーム処理」などの「データ処理を自動化する技術」を解説しています。
第1章 ビッグデータの基礎知識
第1章ではビッグデータの周辺技術が生まれ歴史からその基本となる考え方を説明しています。
1.1節 [背景]ビッグデータの定着
ビッグデータの代表技術である「Hadoop」や「NoSQLデータベース」の役割、「データウェアハウス」との違いについて説明しています。
感想
技術を学ぶ上ではその歴史背景を知っていた方が、その技術の得意、不得意を知ることができどういった場面で使うと効果的かが分かってくるので、非常に有利だと思いました。
また、ビッグデータを扱う場合必ず出てくる用語である「Hadoop」や「NoSQL」これらを改めて知識として再整理することがができました。
1.2節 ビッグデータ時代のデータ分析基盤
「データパイプライン」のシステム構成について説明しています。
ビッグデータをどのように取り込んでいくかの王道のシステム構成を紹介しています。
感想
こちらは私のブログでも過去に紹介したデータ基盤に関する知識を再整理できました。また、ストリームについてはあまり知識がなかったのでそこを補完できたのはよかったです。
1.3節 [速習]スクリプト言語によるアドホック分析とデータフレーム
Pythonによる「対話的なデータ処理」にいて説明しています。データを扱うのに便利な「データフレーム」をつかってデータの加工と集計を例に解説しています。
感想
データを扱う上でよくデータフレームをいう言葉が出てきていたのですがこれが一体何なのかについてあまり理解できていませんでしたが、この節を読むことでその内容を理解することができました。
1.4節 BIツールとモニタリング
「スプレッドシート」や「BIツール」の説明とそれらをつかってどのようにデータをモニタリングをしていくかを解説しています。
感想
私はBIを使ったことがなかったので、実際どのように指標をモニタリングをしていくかを実感できて非常に良かったと思います。
第2章 ビッグデータの探索
本章では大量のデータを効率よく探索できるように、データを可視化するための環境を整える方法を解説しています。
2.1節 基本のクロス集計
クロス集計の解説とそれを、スプレッドシートの「ピボットテーブル」、BIツール、SQL、Pythonでどのように実現するのかを解説しています。
感想
分析にたびたび出てくるクロス集計とは人間が見やすくするために表を整形し、それを様々なツールでどのように実現するかを追うことでより深く理解することができました。
2.2節 列指向ストレージによる高速化
「列指向ストレージ」の考え方についての説明です。大量のデータを「圧縮」して「分散」し多数のCPUで集計する「MPPデータベース」の仕組みも併せて解説しています。
感想
こちらも、ビッグデータを扱う場合に頻出してくる列志向ストレージについて解説でしたが、私はもともとデータベースについてあまり詳しくありませんでした。その一般的なデータベースは行指向でその欠点を列指向にすることで解消する事を知ることができたのは非常に良かったです。
2.3節 アドホック分析と可視化ツール
対話的なデータ分析に用いる「ノートブック」、定期的にグラフを更新する「ダッシュボード」、対話的なダッシュボードのための「BIツール」について解説しています。
感想
アドホック分析や可視化ツールについて具体的にどのようなものがあり、どのような場面で使うことが適しているのかが解説されていて、学ぶことができました。
2.4節 データマートの基本構造
データマートの設計についての解説です。BIツールでは「OLAP」と呼ばれるデータ分析の考え方、それに適した「非正規化テーブル」を作ることで可視化をしやすくします。
感想
データマートのテーブルをどのように設計するべきか、非正規化をうまく使うことが大切であることが学べました。
第3章 ビッグデータの分散処理
本章では分散システムの代表的なフレームワークである「Hadoop」と「Spark」を陥多データ処理について説明しています。
様々なOSS(HDFS、MapReduce、Hive、Tez、Presto、Spark)の生まれた経緯やその得意分野等を解説していますが、私が最も知りたかた情報の1つでもあります。
3.1節 大規模分散処理のフレームワーク
「構造化データ」「非構造化データ」の違いの説明、Hadoopで構造化データを作って集計するまでの流れを説明しています。また、「Hadoop」と「Spark」の違いを説明しています。
感想
ビッグデータの分析基盤としてHadoopに端を発する技術がたくさんあり、これを押さえておくことはビッグデータを語る上では必須の技術であることを理解しました。
3.2節 クエリエンジン
「クエリエンジン」についての説明です。バッチ型のクエリエンジンである「Hive」と対話型クエリエンジンである「Presto」の比較と使い分けについて解説しています。
感想
クエリエンジンの基礎や、その技術をどのように使い分ければよいのかといった点を学ぶことができました。
3.3節 データマートの構築
データウェアハウスやデータマートを構成する各種テーブルについて説明しています。SQLの集約関数を使ってレコード数を削減した「サマリーテーブル」、マスタ情報を定期的にコピーした「スナップショットテーブル」などの説明とそれらを結合して非正規化テーブルを作るまでの流れを解説しています。
感想
具体的なテーブル設計、構築の手段や問題点から、そのベストプラクティスを学ぶことができました。
第4章 ビッグデータの蓄積
本章ではデータを収集し、分散ストレージへと格納するまでのプロセスを説明しています。
4.1節 バルク型とストリーミング型のデータ収集
「バルク型」と「ストリーミング型」のデータ転送について説明しています。集めたデータを分散ストレージへと格納するプロセスを「データインジェスション」と呼び、その過程で処理のしやすい均質なデータを作ることを解説しています。
感想
バルク型とストリーミング型それぞれのデータをどのようにデータ基盤へ格納するか、その技術を基礎的な部分から解説していたので非常に読みやすかったです。
4.2節 [性能×信頼性]メッセージ配送のトレードオフ
ストリーミング型のデータ転送である「メッセージ配送」の仕組みと、その注意点を説明しています。メッセージ配送では性能と信頼性がトレードオフになる場合があります。
感想
あまりストリーミング型のデータを扱うことがないので、メッセージ配送の注意点として、重複や欠損、冪等性の担保などを知ることができたのはよかったでsう。
4.3節 時系列データの最適化
メッセージ配送における「プロセス時間」と「イベント時間」の区別について説明しています。イベント時間を考慮してデータを集計する時には、「述語プッシュダウン」などの最適化を考慮してストレージを構築する必要があります。
感想
ここではデータが発生した時間である「イベント時間」、そのデータが届いて処理するときの時間である「プロセス時間」そこに差があること考慮してシステムを組む必要があるという事を学ぶことができました。
4.4節 非構造化データの分散ストレージ
「NoSQLデータベース」の性質と使い分けについて解説しています。NoSQLデータベースはそれ単体では高度な集計機能を持たないものが多いためクエリエンジンと組み合わせる形でデータ分析をしています。
感想
読み書きにの速度に優れているNoSQLデータベースですが、その種類と特徴について学ぶことができました。
第5章 ビッグデータのパイプライン
本章ではデータパイプラインを自動化するための仕組みが解説されています。
ここでは、エラーが起きた場合などを考慮してどのようにシステムを組むべきかが解説されており、より実践的な手法を学ぶことができます。
5.1節 ワークフロー管理
「ワークフロー管理」の考え方を解説しています。ワークフロー管理ツールを導入するとデータを処理する「タスク」を定期的に実行し、エラーが発生した場合にデモ「リカバリー」しやすくなります。ただし、ワークフローを「冪等」に実装することが必要です。
感想
ワークフローという概念また、同じ処理を行えば同じ結果になるという冪等という考え方の重要性を学ぶことができました。
5.2節 バッチ型のデータフロー
「DAG」を題材に「データフロー」の考え方を解説しています。データフローとワークフローとを適材適所で組み合わせて、バッチ処理のデータパイプラインを作ります。
感想
データフローのリトライで解決できない場合もワークフローでリトライすることで解決できる場合もあり、それぞれを組み合わせてシステムを組むことが大切だという事を学びました。
5.3節 ストリーミング型のデータフロー
データフローを用いた「ストリーム処理」について説明しています。ストリーム処理の結果を、後からバッチ処理によって置き換える「ラムダアーキテクチャ」の考え方も取り上げています。
感想
あるタイミングでしか実行しないためリアルタイム性が劣るバッチ処理にリアルタイムに処理するストリーム処理を合わせてそれぞれを互換しあう、ラムダアーキテクチャを学ぶことができました。
第6章 ビッグデータ分析基盤の構築
本章ではいくつかのオープンソースソフトウェアを使って実際にデータを処理するサンプルコードを実行しています。
私も実際にサンプルコードを使ってトレースしてみようと思います。
次回のブログは
6.1節 スキーマレスデータのアドホック分析
「Jupyter」と「Spark」による対話的なアドホック分析の例を取り上げています。分散ストレージとして「MongoDB」を利用しJSONデータを加工、集計、可視化する流れを見ていきます。
6.2節 Hadoopによるデータパイプライン
6.1節と同じことを「Hive」「Presto」を使って再実装します。一つ一つのデータ処理を冪等なタスクとして実装することで、後からワークフローに組み込めるようにします。
6.3節 ワークフロー管理ツールによる自動化
6.2節で作成したタスクをワークフローの一部として実行できるようにします。ワークフロー管理ツールの例として「Airflow」の使い方を説明しています。
6.4節 クラウドサービスによるデータパイプライン
クラウドサービスを利用したビッグデータのパイプラインについて説明しています。具体的には「Amazon Web Services」「Google Cloud Platform」「Treasure Data」の3つのクラウドサービスの特徴と本書で取り上げた各技術の関係について説明しています。
まとめ
ビッグデータのためのデータ分析基盤で扱う各技術について非常にわかりやすくまとめられていました。非常に読みやすく、ボリュームも多くかなり満足度が高い1冊でした。私のバイブルとしてこれからも読み込んでいきたいと思いました。
データ分析基盤について興味がある方はぜひ一読してみることをお勧めします。
次回は6章の実践を実際にやってブログに乗せてみたいと思います。
最後までご覧いただきありがとうございました。
以上、やましー@データ活用クラウドエンジニア(@yamashi18041)でした。
コメント