データベースとHadoopの連携
Hadoopのしくみとデータベースシステムとの対比
HadoopはGoogleの分散処理基盤システムを紹介した論文をもとに、Apacheコミュニティにて開発されたオープンソースの分散処理システムです。分散処理環境の構築に汎用ハードウェアを活用し、MapReduceと呼ばれる比較的シンプルな分散処理フレームワークを導入することにより、これまでは困難であった分散処理アプリケーション構築のハードルを大きく下げ、大規模データ処理の基盤として活用する事例も増えてきています。
Hadoopのコアの部分は、Hadoop Distributed File System (HDFS) という分散ファイルシステムと、MapReduce分散処理フレームワークが密接に組み合わされて構成されています。Hadoopでデータを処理する場合には、まずデータはファイルとしてHDFS上に格納されますが、HDFSはデータを固定長のブロックに分割した上で複数のノードに分散して配置します。そしてHadoopジョブの実体であるJavaで記述されたMapReduceプログラムが各ノードに送られ、各ノードに配置されたデータブロックを入力として並列に処理を行います。
ところでこのようなHadoopの処理のしくみを読んで、HadoopとGreenplum DBは結構似ているのではないかと思われる方がいるかもしれません。実際、汎用ハードウェアやLinuxをベースにスケールアウト型の処理基盤を構築する点や、データを完全分散するシェアードナッシング型のアーキテクチャに基づいている点、バッチ系の処理に大きな効果がある点などは共通しています。その意味で、両者ともビッグデータ時代の大規模データ処理基盤にふさわしい技術をベースにしていると言えます。
一方で、大きく異なる点もあります。Greenplum DBはリレーショナルデータベースなので、テーブル構造や処理クエリをあらかじめ設計した上でデータをそれに合わせて格納するのが一般的です。また、すべての処理はトランザクションとして扱われ、データベースゆえにACIDの性質をもつことは大前提です。しかしながらHadoopでは、データ格納時は単にファイルとして扱われるだけなので、特に構造を定義しておく必要はありません。そしてMapReduceプログラムの実行時に初めてデータをどのように解釈して処理して行くかということが示されます。さらに、Hadoopの処理はACIDの性質を捨てることで分散処理における可用性や効率性を追求しています。