Hadoopシステム構築のノウハウ
ロジック開発コストの削減
MapReduceフレームワークでは、map関数とreduce関数を記述するだけで、スケール・アウト可能な分散バッチ処理を記述できます。しかし、バッチ処理のロジックを実現するために複数のMapReduce処理を組み合わせなければならない場合も多く、その実装は必ずしも簡単ではありません。
例えば、RDBMSにおけるJOIN操作をMapReduceで実装するのは、かなり面倒です。また、MapReduceフレームワークに習熟したエンジニアを確保することも、現時点では難しいのが実情です。例えて言えば、MapReduceフレームワークによる開発は、マシン語による開発に似ているかも知れません。
この問題を解決するには、マシン語に対する高級言語のような存在、すなわちデータ処理を抽象化したメタ言語が有効です。現在、MapReduceロジックをより簡単に記述できるメタ言語実行環境として、「Pig」と「Hive」が注目されています。PigもHiveも、Apache Hadoopプロジェクトのサブ・プロジェクトとして開発が進められているオープンソースです。
Pigは、米Yahoo!を中心に開発が進められている実行環境です。バッチ処理のデータ・フローを表現する、Pig Latinと呼ばれる言語で記述されたプログラムを実行できます。Pig Latinで記述したロジックは、MapReduceに自動的に変換され、Hadoop上で実行されます。米Yahoo!社内で実行しているMapReduceジョブの大部分は、Pig Latinによって開発されていると言われています。
Hiveは、米Facebookが開発した、Hadoopベースのデータ・ウエアハウス(DWH)です。HiveもPigと同様に、Hive QLと呼ぶシンプルなクエリー言語環境を提供しています。Hive QLは、SQLによく似た文法を持っていて、HDFS上に搭載した巨大なデータを簡単に操作できます。実際には、Hive QLで書かれたクエリーは、MapReduceに変換されて実行されます。
HiveがPigと大きく違う点は、スキーマを定義する機能の有無にあります。Hiveは、スキーマの定義機能を持っているため、よりRDBMSに近い感覚でコーディングできます。米Facebookでは、ロジック開発の生産性向上を目的に、積極的にHiveを活用しているとのことです。
PigやHiveなどのメタ言語実行環境には、現在のところMapReduceフレームワークを直接利用したプログラミングほどの自由度はありません。また、Pig LatinやHive QLによるクエリーの実行速度は、MapReduceフレームワークの直接利用と比べると若干劣ります。しかし、Hadoopクラスタ上で動かすロジックの生産性を大幅に向上させることができる点は、大きな魅力です。エンタープライズ用途への活用においては、ぜひとも利用を検討すべきでしょう。
おわりに
本連載では、Hadoopをエンタープライズ用途に活用するために必要となる基礎知識を伝えてきました。
Hadoopは、プロジェクトの開始から5年目に入り、エンタープライズ用途での活用事例も続々と報告されるようになってきています。現時点で不足している機能も、数々のサブ・プロジェクトによって補われつつあります。今後、情報爆発時代の新たなインフラとして、さらに発展することが期待されます。