本連載の第3回は、Hadoop周辺プロダクトの紹介を中心に、HadoopとRDBMSとのつながりを解説し、スムーズなデータの移行手段について検討する。

 RDBMS(リレーショナルデータベース管理システム)は、非常に多くのITシステムでデータの保存に利用されている。RDBMS以外のデータベース製品が選択されるのは例外的ケースであるという印象を受けるほどだ。トランザクション処理によりデータの一貫性を強力に保持できること、歴史が長く完成度の高い実装が多数存在すること、結果として多くの技術者がRDBのデータモデルとそのインタフェースであるSQLになじみがあることなどがその理由であろう。

 ただし、高い一貫性を提供するRDBMSは、サーバーサイドでの処理量が多く、処理を並列化してスケールアウトを図ることが難しい。そのため、扱えるデータの規模を大きくしようとすると、高価なハードウエアを用意する必要に迫られる場合が多い。

 対照的にHadoopは数千台レベルまでスケールアウトするアーキテクチャーとなっているため、安価なハードウエアを多数利用して、ペタバイト級以上の巨大なデータの処理を実現できる。その代わり、RDBMSが提供するような、データ読み書きの高度なトランザクション制御や、インデックスによる高速なランダムアクセスなどの機能は持っていない。

 Hadoopの分散ファイルシステムであるHDFSに格納されたファイルは、基本的に数十MB以上の単位で管理されるデータブロックとして扱われる。分散処理フレームワークであるMapReduceのアプリケーションからデータにアクセスする際は、特定のディレクトリ内に置かれたデータファイルをフルスキャンする使い方が基本になる。データファイル中にどのような形式でどのようなデータ構造が格納されているかは、ユーザーとアプリケーションが把握して対応するもので、Hadoopのフレームワークでは管理されない。

 つまり、HadoopとRDBとはそれぞれ異なる目的をもったソフトウエアであり、RDBMSを利用して作られたシステムを単純にHadoopで置き換えることはできない。とはいえ、既存のシステムで非常に多くRDBMSが用いられていることから、これまでRDBに格納して処理しているデータを移行できるかという切り口で、Hadoopの導入が検討されることも多い。

Hadoopをデータベースのように使う――HiveとHBaseを活用

 Hadoopエコシステムには、Hadoopのコア部分に欠けているデータアクセス機能を補ったり、分散処理アプリケーションの開発を容易にしたりするためのプロダクトが数多く存在する。

 ここでは、このエコシステムの中から、HiveとHBaseについて簡単に紹介しよう。