ビッグデータ向けプラットフォームに入門する


(2019/03追記: 記事が長くなったので一部分割しました。)

はじめに

今日大規模データ処理には非常に多くの種類のプラットフォームが用いられています。

しかしその間口の広さから、これらのデータ処理基盤を勉強しようとする際、
どこから手を付けたらいいのかわからない、各基盤を解説した記事を読んでも知らない単語だらけ、
結局各基盤の違いがどこにあるか分からない、といったことが起こりがちです(私は起こりました)。

そこでこの記事では、データ処理基盤の全体感を把握することの第一歩として、
代表的な基盤であるDWH, Hadoop, NoSQLについて、特徴を比較しつつ解説していきます。

  • この記事でわかること
    • 各基盤のなんとなくのアーキテクチャ・思想
    • それらに由来する特徴と使われる目的の違い
  • この記事でわからないこと
    • 各基盤の具体的な使い方

そもそもなぜ大規模データ処理基盤を使うのか

なぜ普通のRDBでない、大規模データ用の処理基盤が使われるようになったのでしょうか。
それは「3V(Volume, Velocity, Variety)についての要請が高まったから」ということに集約できます。

処理対象となるデータ量(Volume)の爆発的な増加とそれを高速に処理すること(Velocity)への要求が高まっていることはもはや言うまでもありません。
しかしRDBは単体のハードで動く必要があるため(詳細はNoSQLの節で後述します)、
ペタバイト級のデータを保持することは難しくコストにも見合いません。
また、データを格納できたとしても、Disk I/Oに膨大な時間がかかることとなり、
VolumeおよびVelocityに関する要件を満たすことが非常に難しいと言えます。

さらに、従来のように扱う対象となるデータの多様性(Variety)も増加していると言えます。
従来のようなスキーマが厳密に定義されたデータだけでなく、
RestfulなAPIから取得したJSONデータ、アクセスログなども扱う必要があります。
これらのデータもスキーマを定義し、RDBに格納することは可能ではあるものの、
定義自体が面倒であったり、仕様の変更に柔軟に対応できないという問題があります。

そのため、3Vの要件に対応できる大規模データ処理用の基盤が広く採用されているというわけです。

代表的なデータ処理基盤

一口に大規模データ処理基盤といっても、各プラットフォームにはそのアーキテクチャに由来する特性があります。
そのため用途に応じて複数のプラットフォームを使い分ける・組み合わせるのが一般的です。
一方で各基盤は互いに自分の苦手分野を補完するよう進化しているため、これらの特性は被る部分があり、
それぞれの特性がわかりにくい原因となっています。

しかし基本的にはどのプラットフォームも分散処理を行うことを前提としたアーキテクチャと言えます。

これにより

  • Disk I/Oを並列的に行うことで処理時間を短縮できる
  • 高スケーラビリティで、容量を柔軟に変更することが可能

という特徴があります。

以下の子記事で歴史期的に登場した順にData WareHouse, Hadoop, NoSQLデータベースについて解説します。

Data WareHouse(DWH)

ビッグデータ向けプラットフォームに入門する - DWH

Hadoop

ビッグデータ向けプラットフォームに入門する - Hadoop

NoSQL

ビッグデータ向けプラットフォームに入門する - NoSQL

(RDB)

順番通り読んでいただいた方ならわかるかと思いますが、このような新しいデータ処理用のプラットフォームが出てきたからといって、RDBがオワコンになったわけでは決してありません

トランザクション処理を確実に行うためにはRDBは不可欠です。
さらに(ある程度のデータ規模までは)非常に小さなレイテンシでデータにアクセスすることができ、
しかも非常に長い間使われているプロダクトのためチューニングのための知見が多く溜まっています。
間違いなく今後もRDBは生き残り続けるでしょう。

またここまで紹介した基盤の総括にもなりますが、https://www.slideshare.net/recruitcojp/rdbnosqlnosql にあるの各基盤の位置づけの図は非常にわかりやすいです。
このスライドの作者である方の著書もわかりやすいのでよかったら読んでみてください。

あとがき

大規模データの処理基盤としてDWH, Hadoop, NoSQLについての概要と特徴について見てきました。

思ったより長くなってしまいましたが、オブジェクトストレージや検索エンジンなどまだまだ触れていないプラットフォームもたくさんありますし、大規模データ処理を扱うのであれば、ログ収集、バッチ・ストリーム処理、ETLなどデータの収集やパイプラインについての知識も必要となるかと思います。
また元気が出ればここらへんの内容についても追加で記事を書きたいと思います。

記事の内容について誤り・補足等のコメントがあればぜひお願いいたします。