従来、大量データの並列分散処理を実現するためには、同期処理などの複雑なプログラムを作成する必要がありました。Hadoop では、並列分散処理を考慮したプログラムを作成する必要はありません。利用者は、MapReduce アルゴリズムにしたがって Map 処理と Reduce 処理の2つをアプリケーションとして作成するだけです。データの分散格納・抽出や作成した処理の並列実行は、すべて Hadoop が担っています。
Hadoop 上で処理を行うためのアプリケーションには、以下の種類があります。
MapReduce アプリケーション
Hadoop の MapReduce フレームワーク上で動作する Java プログラムを、Hadoop API を利用して開発します。
Hive クエリ
Hadoop API を利用することなく、The Apache Software Foundation で開発された Apache Hive を利用して、SQL 相当の言語(HiveQL)で記述するクエリです。
Pigスクリプト
Hive と同様に、Hadoop API を利用することなく、SQL言語相当の機能を有する Pig Latin 言語を利用したスクリプトを記述します。
HBase アプリケーション
HBase に対するデータ入出力、HBase 上のデータに対する操作を行う Java プログラムを、HBase API を利用して開発します。
以降、MapReduce アプリケーションの開発について説明します。その他のアプリケーション開発については、Apache Hadoop プロジェクトのWebページ等を参照してください。
アプリケーションの処理ロジックを設計します。並列分散処理を行うために従来設計が必要であった、入力ファイル分割やマージなどの処理は、Hadoop のフレームワークが実行するため設計が不要です。そのため、業務に必要なロジックの設計に専念することができます。
MapReduce アプリケーションの場合、アプリケーション開発者は Hadoop API を理解し、MapReduce フレームワークに従った設計が必要となります。主に、以下の設計を行う必要があります。
Key、Value に該当する項目の決定
Map 処理の内容
Reduce 処理の内容
アプリケーションを設計した結果をもとに、アプリケーションを作成します。
MapReduce アプリケーション
通常の Java アプリケーションの作成と同様に、Javaプロジェクトを作成し、コーディングを行います。
Eclipse のビルドパスに Hadoop の jar ファイルを追加することで、Hadoop API を使用することができます。
なお、hadoop -core-xxx.jar の指定は必須です(「xxx」には Hadoop のバージョンが入ります)。なお、その他の Hadoopのライブラリは、使用する Hadoop API に応じて適宜指定してください。
MapReduce アプリケーションのリファレンスについては、以下に示す Apache Hadoop が提供する情報を参照してください。
Hadoop API を利用する場合
Hadoop プロジェクトトップページ
http://hadoop.apache.org/mapreduce/
スタートガイド
リリース情報
ドキュメント
MapReduce プロジェクトページ
http://hadoop.apache.org/mapreduce/
MapReduce チュートリアル
http://hadoop.apache.org/common/docs/r1.0.1/mapred_tutorial.html
※上記の MapReduce チュートリアルで記載されているサンプル、および説明は、パッケージ「org.apache.hadoop.mapred」を基本に記載 されていますが、これらのパッケージは現在のステーブルな Hadoop のバージョンでは非推奨になっており、チュートリアルで書いてある内容が動かない場合もあるため、参考程度に参照してください。