[[Hadoop]] >

* 目次 [#v5105697]
#contents

* Pigとは [#ffbdeda7]
- Pigとは、大規模なデータの分析を行うための抽象度の高い言語(PigLatin((ピッグ・ラテン語とかけてあるのでしょう。)))とその実行環境とを含むプラットフォームです。
- 処理にはHadoop環境が利用されるため、[[Hadoop分散ファイルシステム]]と[[HadoopMapReduceフレームワーク]]のフロントエンドアプリケーションでもあります。Pigの分析語彙の抽象度は高く、Map/Reduce処理の詳細に引きづられないため、より分析ロジックの実装に集中できます。

* インストール [#xeab0c5e]

+ [[Pigインストール]]
+ [[Pigインストール(旧)]] - &color(red){''DEPRECATED''};

* Grunt(Pig対話シェル) [#i75d1a37]

-Grunt は、Pig の対話シェルです。動作確認に最適な環境です。
-Grunt の動作モードには、Hadoop環境を必要としない''ローカルモード''と、実際のHadoop環境に接続して分散処理を行う ''MapReduce モード''の二つがあります。検証または開発時には、ローカルモードを利用すると良いでしょう。

** ローカルモード [#jdc1e9fe]

-ローカルモードでは、HDFS のセットアップを必要としません。ローカルファイルシステムが使用されます。開発環境として最適です。
-$PIG_HOME/bin にパスが通っており、bash が使える環境(WindowsではCygwinなど)であれば、以下のpigコマンドで起動できます。なお、起動せずに起動パラメータを確認したい場合には、''-secretDebugCmd'' オプションを付加します。
#geshi(bash,number){{
-以下のようにpigコマンドに ''-x local'' オプションを与えて起動できます。なお、起動せずに起動パラメータを確認したい場合には、''-secretDebugCmd'' オプションを付加します。
#geshi{{
$ pig -x local
}}
-OS環境に依存しない起動方法は以下の通りです。COLOR(red){※ただし、pigコマンド(起動スクリプト)では、自動で各環境変数を設定していますので、出来る限りpigコマンドを利用する方がよいでしょう。}
#geshi(bash,number){{
$ java -cp pig.jar org.apache.pig.Main
または、
$ java -cp pig.jar org.apache.pig.Main -x local
grunt> pwd
file:/home/hadoop
file:/home/alice
}}

** MapReduceモード [#s986be4b]

-MapReduceモードでは、実際に HDFS に接続されます。
-ローカルモード同様に、$PIG_HOME/bin にパスが通っており、bash が使える環境では、以下のような設定ファイルを用意し、pigコマンドで起動できます。
--''$PIG_HOME/conf/pig-env.sh'': Pig がクラスタのいずれかのノードにインストールされている場合には、以下のように設定し Hadoop の設定ファイルを検索できるようにします。もちろん、この HADOOPSITEPATH の追加の代わりに、次項の pig.properties による設定も可能ですが、いくらかDRY原則に反するでしょう。COLOR(red){''PIG_HADOOP_VERSION'' 環境変数は、pig コマンドで起動する場合のみ有効となります。組込の PigServer などを使用する場合には、サーバのバージョンに合致する適切な Hadoop のライブラリを classpath に追加しておく必要があります。}
#geshi(bash,number){{
export JAVA_HOME=/usr/lib/jvm/java-6-openjdk
# Pig が使用する Hadoop のプロトコルバージョン。サーバのそれに合わせます。
# 以下は、同梱された hadoop-0.20.x のライブラリを使用する場合
export PIG_HADOOP_VERSION=20
export HADOOP_HOME=/usr/local/hadoop
# 次項にあるHADOOPSITEPATHの設定
export PIG_CLASSPATH=$HADOOP_HOME/conf
}}
--''$PIG_HOME/conf/pig.properties'': Pig がクラスタ外のマシンにインストールされている場合には、前項の設定に加え、PIG_CLASSPATH 環境変数設定の代わりに、以下の内容をこの設定ファイルに追加します。
#geshi(ini,number){{
fs.default.name=hdfs://namenode01.example.com:9000
mapred.job.tracker=namenode01.example.com:9001
}}
--起動コマンドは以下の通り。
#geshi(bash,number){{
-適切に設定ファイル(pig-env.sh)を用意してから、pigコマンドで起動します。設定の詳細については、[[Pigインストール]]をご参照ください。
#geshi{{
$ pig
または、
$ pig -x mapreduce
grunt> pwd
hdfs://namenode.example.com:9000/user/hadoop
hdfs://pleiades-nn.grid.example.com:9000/user/alice
}}
-OS環境に依存しない起動方法は以下の通りです。''HADOOPSITEPATH'' は、サイト設定ファイル(*-site.xml、以前はhadoop-site.xml)があるパス(通常、$HADOOP_HOME/conf)になります。この HADOOPSITEPATH が不正な場合にはローカルモードになります。
#geshi(bash,number){{
$ java -cp pig.jar:HADOOPSITEPATH org.apache.pig.Main -x mapreduce
grunt> pwd
hdfs://namenode.example.com:9000/user/hadoop
}}
-COLOR(red){''[Note]''} Pig は、ジョブ実行時に HDFS 上の /tmp ディレクトリに一時ファイルを書き込みます。もし、/tmp ディレクトリがない場合には、適切なパーミッションで用意しておきましょう。ただし、HDFS のパーミッションには sticky bit がないので、適切なグループ権限を付与するか、777にするか、パーミッション機能自体を無効にするかしかありません。((参考までに、Cloudera 配布版の疑似分散モード設定パッケージでは、パーミッション機能を無効にしています。))
-COLOR(red){''[Note]''} COLOR(blue){''[すでに修正済のようです]''}もう一点((調査不足で、現時点ではHadoopの設定の誤りか、Pigのバグか判断できません。))、ジョブ実行時に、ローカル分割(split)データをローカルファイルシステム上のプロパティ ''mapred.system.dir''((このプロパティには、通常使用している分散ファイルシステム(主にHDFS)上のパスを設定します。したがって、ローカルファイルシステム上には該当するディレクトリが書き込み可能で存在しない可能性が高いです。ただし、このデフォルト設定値が、/tmp/hadoop-${user.name}/mapred/system なので、この設定を上書きせずに、かつ Hadoop デーモンの起動ユーザと同じユーザでジョブを実行した場合には、成功するでしょう。)) に設定されたパスに書き込もうとするため、エラーとなり、実行に失敗します。''暫定的に''、ローカルファイルシステム上にも、mapred.system.dir に設定されたディレクトリを適切なパーミッションで用意しておきましょう。ローカル作業データ書き込みのようなので、プロパティ ''mapred.local.dir'' に設定されたディレクトリを使用すべき処理なのかもしれません。((設定ファイル中のコメントには、''The local directory where MapReduce stores intermediate data files.'' とあります。))以下は失敗時のデバッグログの内容です。
#geshi(bash,number){{
grunt> a = load '/user/hadoop/data/myfile.txt';
grunt> dump a;
...
DEBUG org.apache.hadoop.ipc.RPC - Call: mkdirs 6
DEBUG org.apache.hadoop.mapred.MapTask - Writing local split to /hadoop/mapred/system/job_local_1/split.dta
WARN  org.apache.hadoop.mapred.LocalJobRunner - job_local_1
java.io.IOException: Mkdirs failed to create /hadoop/mapred/system/job_local_1
...
ERROR org.apache.pig.tools.grunt.GruntParser - java.io.IOException: Unable to open iterator for alias: a
}}

* サンプルコード [#s75512e9]
-[[こちら>Pigサンプルコード]]

* PigTips [#wefa05d9]

-[[Pigと圧縮データ]]
-[[PigとHiveの比較]]

* リソース [#ia891033]

- [[ホームページ>http://hadoop.apache.org/pig/]]

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS