「データのライフ・サイクル」で考えるHadoopの使いどころ
「データのライフ・サイクル」を考える
RDBMSは、「非定型処理への活用」、「バッチ処理のスケール・アウト」という観点で限界に突き当たっています。しかし、RDBMSの豊富な機能が現代のコンピュータ・システムに欠かせない存在であることも間違いありません。この矛盾をどう解決すればいいのでしょうか。
この問題を解決する鍵は、「データのライフ・サイクル」にあります。
RDBMSは、管理するデータはすべて「起きている(活動している)」、つまり「いつでも更新される可能性がある」ことを前提に設計されています。例えば、銀行の口座残高は、バッチ処理が進んでいる最中にも、ATMからの引き出しなどのリアルタイム処理で更新される可能性があります。
しかし、すべてのデータが「起きている」わけではありません。例えば、銀行口座の「昨日の取引履歴」は、過去のデータなので、更新される可能性はまずありません(過去の取引履歴を更新するのは、やむを得ない誤りの訂正か、そうでなければ改ざんになります)。書籍販売サイトの利用者の購入履歴や、Webサーバーのアクセス・ログも同じです。このような、過去の「眠っている(活動していない)」データを扱うには、RDBMSの高度な機能は必須ではありません。
定型処理が中心だった時代は、「起きている」データだけをRDBMSに保存しておけば業務を遂行できたため、「眠っている」データはテープ媒体などに保管しておけば十分でした。しかし、データ・マイニングなどの非定型処理では、膨大な「眠っている」データもハード・ディスクに格納し、頻ぱんに活用することが求められます。
多くのコンピュータ・システムでは、「起きている」データと「眠っている」データが併存しています。「起きている」データは、定型処理を経てしまえば、「眠っている」データに変化していきます。RDBMSとHadoopをうまく使い分けるには、データのライフ・サイクルを意識することが重要です。
RDBMS、Hadoop、KVSを組み合わせる
Hadoopは、まさに「眠っている」データをバッチ処理で活用するのにうってつけのインフラです。過去のデータをHadoop分散ファイル・システム(HDFS)に保存しておくことで、多様なバッチ処理の要求に応えることができます。非定型処理では、さまざまな角度からの分析が行われ、どのような分析がなされるかを事前に予想しておくことが難しいため、事前に加工することなくテキスト形式で保存しておくのが優れたやり方です。
「眠っている」データをリアルタイム処理で利用するにはどうすればよいでしょうか。Hadoop自体は、インデックスの機能を持っていないため、「Aさんの過去の取引履歴を照会したい」という要求に即座に答えることはできません。そこで有用なのが、Key-Value Store型データベース、通称KVSです。Apache CassandraやHBaseなどがよく知られています。
KVSは、キー(key)をインデックスとして、任意の値(value)を即座に取り出せる機能をもっており、Hadoopと同様、スケール・アウト可能な仕組みになっています。しかし、RDBMSのようなトランザクション処理は備えていません。KVSのこれらの特徴は、めったに更新されない「眠っている」データを大量に蓄積しておくのに適しています。
データのライフ・サイクルを考慮したRDBMS、Hadoop、KVSの組み合わせの例を図1に示します。
図1: RDBMS、Hadoop、KVSを組み合わせて使い分ける(クリックで拡大) |
RDBMSは、口座残高、ログイン・パスワード、電話番号、価格、在庫数など、厳密なトランザクション処理を必要とする「起きている」データ(赤色部分)を担当し、リアルタイム処理・バッチ処理の両方の要求に応えます。
利用者の退会や、商品の廃盤などで、データが「眠っている」状態(緑色部分)になったら、バッチ処理によって、HadoopのHDFSやKVSにデータを移行します。データのライフ・サイクルを考慮して、RDBMSからHadoop、KVSへのデータ移行をはかることで、RDBMSがスケール・アウトしにくいという問題を解決できます。
Hadoopの主な仕事は、リアルタイム処理によって生み出され続ける膨大なログ・ファイルを蓄積し、さまざまな解析をバッチ処理によって行うことです。ログ・ファイルに記録されたデータは更新されることがないため、生み出された瞬間に「眠っている」状態です。
Hadoopクラスタのサーバー台数を増やすことで、蓄積できるデータ量とログ・ファイルの処理能力をどんどん増やすことができます。
KVSは、Hadoopによる処理結果、例えば過去のログ・ファイルから導き出された「この商品を買った人はこんな商品にも興味があります」といったデータを搭載し、リアルタイム処理に備えます。また、RDBMS並みの厳密なトランザクション処理が要求されないデータの管理にも、KVSを利用することができます。
KVSの処理能力も、Hadoopと同様にサーバー台数を増やすことで、増強できます。厳密なトランザクションをあきらめる代わりにスケール・アウト性を手に入れるという考え方は、BASE(Basically Available, Soft state, Eventually consistent)という名前で、いま注目されています。
次回で、最終回となります。最終回では、Hadoopをビジネスの現場に導入するにあたって必要となるハードウエア、すなわちサーバー機やネットワーク・スイッチについて、考慮すべきポイントを解説します。