Amazon Elastic MapReduceでPigを使う。(その1;Eclipseで開発環境を構築する)
PigはHadoop Map ReduceのためのDSL(Domain 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として追加する。
追加後、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,ホゲホゲ)