Greeplum DBのHadoop連携における外部テーブルの定義とデータ移動のしくみ
リレーショナルデータベースとHadoopの間の連携にはさまざまなパターンがあります。最近ではどのデータベース/データウェアハウスベンダーもHadoopとの連携に力を入れて機能を用意しておりますが、製品によってそのしくみは異なるため、実際にはデータの転送時間や使い勝手で差が出てきます。特に両者間でデータアクセスを行う場合にどのような連携方法があるか、以下の3つのパターンを見てみましょう。
1. データベースからデータをファイルにダンプし、Hadoopの転送コマンド(実質的にはJava APIを経由)でファイルをHadoopのファイルシステムに投入する
どの製品でも対応可能な非常にシンプルな方法ですが、データを一時格納するためのファイルシステム領域が必要です。また、データベースからのデータのダンプ、Hadoopへの転送の両方がボトルネックとなり得るため(特にJavaプロセスがボトルネックとなりがち)、性能はあまりよくありません。
2. Hadoop上でSqoopを利用して並列にデータを転送する
Hadoopで動作するデータのインポート/エクスポートツールSqoopを利用してデータを転送する方法です。データベース製品側でSqoop対応を明示している場合もありますし、JDBCで接続することも可能です。データの一時ストレージが不要で、MapReduceジョブとして多数のプロセスで並列にデータアクセスを行うため、効率的に転送を行うことができます。ただし、データベース側の処理が完全には並列化されていないケースも多く、さらにMapReduceジョブが起動されるため一定の時間的なオーバーヘッドを計算に入れておく必要があります。
3. Hadoopファイルシステムを対象としたGreenplum DBのパラレルローディング
Greenplum DBはHadoopのHDFS上にあるデータのアクセスに、通常のデータのパラレルローディングと同じしくみを利用します。Greenplum DBの複数のセグメントサーバは、HDFS内部で分散配置されているデータブロックをHDFS APIを介して並列に直接アクセスするため、ボトルネックのない効率的なデータアクセスを実現しています。データベース上ではHDFS上のファイルは外部テーブルのデータソースとして抽象化されているため、開発者はSQLで外部テーブルに対する処理を記述するだけで、Hadoopを意識することなくデータを利用できます。
このように、Greenplum DBのユニークなHadoop連携機能を利用することで、データベースとHadoopをシームレスに連携することが可能になり、データ活用の幅が大きく広がります。
さて、次回はいよいよ連載最終回。高度な統計解析分析を可能にし、処理のスケーラビリティを向上させるIn-Database分析技術について触れてみたいと思います。