Amazon Elastic MapReduceでPigを使う。(その1;Eclipseで開発環境を構築する)

PigはHadoop Map ReduceのためのDSLDomain Specific Language)で、直感的な記述でプログラムの記述ができて、それが(プリ)コンパイラによってMapReduceベースのプログラムに変換される。Pigを記述するDSLはPig Latinと呼ばれる。
Hiveとともに有名なDSLで、Hiveの方がSQLに似た記述を採用している。

Pigの開発環境は、以前に紹介したHadoopの開発環境にちょっと手を加えればよい。

開発は、Mac Book Pro (OSX Mountain Lion)で行った。

Pigのダウンロード

apache本家サイトから、Pigをダウンロードする。
今回は、pig-0.11.1.tar.gz をダウンロード・解凍後に、ホームディレクトリへ移動し、シンボリックリンクを張った。

lrwxr-xr-x    1 tetsuya  staff       26  6 27 15:08 pig -> /Users/tetsuya/pig-0.11.1/
drwxr-xr-x@  25 tetsuya  staff      850  3 22 15:20 pig-0.11.1

Eclipseでプロジェクトの作成

Eclipse (Juno)Java EEを立ち上げ、Javaプロジェクトを作成する。
サンプル用のプロジェクトは、pigsampleとした。
ダウンロードしたjarに含まれるクラスをJavaアプリケーションとしてローカルで実行し、Pig Latinのプログラムはテキストファイルに保存する。なので、プロジェクトにクラスは作成しない。

プロジェクトを右クリックし、Propertiesを開き、Java Built Path をクリックし、以下のjarをexternal jarとして追加する。

  • hadoop直下のjar(coreだけでもよい)
  • hadoop/lib直下のjar
  • pig/pig-0.11.1-withouthadoop.jar

追加後、OKを押す。

Pigスクリプトを置くpigLatin、入出力ファイルを置くinput, outputフォルダーを作成する。


入力用のフォルダーにサンプルとなるデータ(test.txt)を作成する。
Pig LatinでテキストデータをLOADする際、デフォルトのデリミッターはtabなので、tabu区切りのデータを用意した。


pigLatinフォルダーにプログラム(sample1.pig)を保存する。
これで、サンプルプログラムの作成は終了である。

Pigを動かしてみる。

上で作成したサンプルプログラムを実行する。

RunメニューからRun Configurationを選択し、Java Applicationを追加する。
このとき、Main Classを

org.apache.pig.Main

とする。

argを以下に設定する。

-x local -f pigLatin/sample1.pig

これは、

  • ローカルモード(Hadoop分散モードではなく、Pig本体だけで動かす)で実行
  • プログラムファイルは、pigLatinフォルダーのsample1.pig

を意味する

applyを押した後、Runを押すとローカルでpigが実行され、コンソールにLOADされたデータのタプルが表示される。

2013-06-27 15:40:43,147 [main] INFO  org.apache.pig.Main - Apache Pig version 0.11.1 (r1459641) compiled Mar 22 2013, 02:13:53
2013-06-27 15:40:43,148 [main] INFO  org.apache.pig.Main - Logging error messages to: 
.....
.....

Input(s):
Successfully read records from: "file:///Users/tetsuya/Documents/workspace_jee/pigsample/input/sample1"

Output(s):
Successfully stored records in: "file:/tmp/temp-1787349526/tmp-890288036"

Job DAG:
job_local_0001


2013-06-27 15:40:45,748 [main] INFO  org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.MapReduceLauncher - Success!
2013-06-27 15:40:45,751 [main] WARN  org.apache.pig.data.SchemaTupleBackend - SchemaTupleBackend has already been initialized
2013-06-27 15:40:45,754 [main] INFO  org.apache.hadoop.mapreduce.lib.input.FileInputFormat - Total input paths to process : 1
2013-06-27 15:40:45,754 [main] INFO  org.apache.pig.backend.hadoop.executionengine.util.MapRedUtil - Total input paths to process : 1
(1,hoge)
(2,ホゲホゲ)