Pig >

note.pngDEPRECATED!: このページで説明しているPigのバージョンは古いです。ご利用は非推奨です。Pigインストールをご参照ください。

目次

インストール

  1. Hadoop 環境は、Pig をローカルモードで起動する場合には必須ではありませんが、本格的な利用をするのであればセットアップしておいた方がよいでしょう。
  2. バイナリパッケージのインストール
    1. 公式サイトのパッケージの場合には、適当なロケーションに展開します。
    2. Cloudera 配布版を使用する場合には、以下の通りです。各パッケージ管理システムにおける Cloudera リポジトリの登録については、こちらを参照してください。
      1. Debian 系
        # aptitude install hadoop-pig
      2. RedHat?
        # yum install hadoop-pig
  3. 一般ユーザで使用する場合には、HDFS 上にホームディレクトリ(/user/${user.name})/tmp が用意されており、書き込み可能である必要があります。詳細は、下記、MapReduce?モードの項を参照ください。

ビルド

  • 最新のソースをテストしたい場合には、以下の手順で、pig.jar をビルドします。
    1. $ svn co http://svn.apache.org/repos/asf/incubator/pig/trunk pig
    2. $ cd pig
    3. $ ant

Grunt(Pig対話シェル)

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

ローカルモード

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

MapReduce?モード

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

ヘルプ

grunt> help
Commands:
<pig latin statement>;
store <alias> into <filename> [using <functionSpec>]
dump <alias>
describe <alias>
kill <job_id>
ls <path>
du <path>
mv <src> <dst>
cp <src> <dst>
rm <src>
copyFromLocal <localsrc> <dst>
cd <dir>
pwd
cat <src>
copyToLocal <src> <localdst>
mkdir <path>
cd <path>
define <functionAlias> <functionSpec>
register <udfJar>
set key value
quit

簡易起動スクリプト[OBSOLETE]

こちらのスクリプトで、Gruntシェルの起動を行えます。変数は適宜変更してください。※現在はすでにpigコマンドがありますので、そちらを利用してください。

サンプルコード

Pigスクリプトの実行

pig [options] [-f[ile]] file

ヘルプ

$ pig -h
または
$ java -cp pig.jar org.apache.pig.Main -h

Apache Pig version 0.5.0 (r829623)
compiled Oct 25 2009, 18:58:38

USAGE: Pig [options] [-] : Run interactively in grunt shell.
       Pig [options] -e[xecute] cmd [cmd ...] : Run cmd(s).
       Pig [options] [-f[ile]] file : Run cmds found in file.
  options include:
    -4, -log4jconf log4j configuration file, overrides log conf
    -b, -brief brief logging (no timestamps)
    -c, -cluster clustername, kryptonite is default
    -d, -debug debug level, INFO is default
    -e, -execute commands to execute (within quotes)
    -f, -file path to the script to execute
    -h, -help display this message
    -i, -version display version information
    -j, -jar jarfile load jarfile
    -l, -logfile path to client side log file; current working directory is default
    -m, -param_file path to the parameter file
    -o, -hod read hod server from system property ssh.gateway
    -p, -param key value pair of the form param=val
    -r, -dryrun
    -t, -optimizer_off optimizer rule name, turn optimizer off for this rule; use all to t
urn all rules off, optimizer is turned on by default
    -v, -verbose print all error messages to screen
    -w, -warning turn warning on; also turns warning aggregation off
    -x, -exectype local|mapreduce, mapreduce is default
    -F, -stop_on_failure aborts execution on the first failed job; off by default
    -M, -no_multiquery turn multiquery optimization off; Multiquery is on by default** リソース [#vbf03195]

*1 参考までに、Cloudera 配布版の疑似分散モード設定パッケージでは、パーミッション機能を無効にしています。
*2 調査不足で、現時点ではHadoopの設定の誤りか、Pigのバグか判断できません。
*3 このプロパティには、通常使用している分散ファイルシステム(主にHDFS)上のパスを設定します。したがって、ローカルファイルシステム上には該当するディレクトリが書き込み可能で存在しない可能性が高いです。ただし、このデフォルト設定値が、/tmp/hadoop-${user.name}/mapred/system なので、この設定を上書きせずに、かつ Hadoop デーモンの起動ユーザと同じユーザでジョブを実行した場合には、成功するでしょう。
*4 設定ファイル中のコメントには、The local directory where MapReduce? stores intermediate data files. とあります。

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2012-08-19 (日) 15:56:27 (2995d)