PigはHadoopのサブプロジェクトで、Hadoopを対話的に操作することが可能なインターフェースと、 MapReduceを効率的に行うための専用言語環境を提供してくれる。
Yahoo!なんかでも使われているっぽい。
Pigの素晴らしいところは、LISPのREPLのように、書いたコードをその場で実行しながら確かめられること。
■事前準備
完全分散モードのHadoop環境が必要なので構築しておく。
Hadoop (3) 完全分散モード
■参考ページ
きりんさん日記 1台でHive, Pigを試してみる(Ubuntu + Cloudera)
(1)Pigの入手する
ftp://ftp.meisei-u.ac.jp/pub/www/apache/dist/hadoop/pig/
現時点での最新版は0.7
NamaeNodeで実施(例
[hadoop@hdp01 ~]$ cd
[hadoop@hdp01 ~]$ wget http://ftp.kddilabs.jp/infosystems/apache/hadoop/pig/stable/pig-0.7.0.tar.gz
[hadoop@hdp01 ~]$ tar zxvf /pig-0.7.0.tar.gz
(2)設定ファイルの編集
[hadoop@hdp01 ~]$ vi pig-0.7.0/conf/pig-env.sh
----------------------------------------------
export JAVA_HOME=/usr/java/default
export HADOOP_HOME=/home/hadoop/hadoop-0.20.2
export PIG_CLASSPATH=$HADOOP_HOME/conf
----------------------------------------------
基本的にはこれだけでよい。
(3)動かしてみる
-あまり考えることはない
[hadoop@hdp01 ~]$ pig-0.7.0/bin/pig
10/07/25 04:07:15 INFO pig.Main: Logging error messages to: /home/hadoop/pig_1279998435024.log
2010-07-25 04:07:15,350 [main] INFO org.apache.pig.backend.hadoop.executionengine.HExecutionEngine - Connecting to hadoop file system at: hdfs://hdp01.sol-net.jp:9000
2010-07-25 04:07:15,660 [main] INFO org.apache.pig.backend.hadoop.executionengine.HExecutionEngine - Connecting to map-reduce job tracker at: hdp01.sol-net.jp:9001
grunt>
-ヘルプを表示してみる。
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
-現在のパス grunt> pwd hdfs://hdp01.sol-net.jp:9000/user/hadoop -カレントディレクトリのファイルを確認 grunt> ls 2010-07-25 04:07:42,430 [main] ERROR org.apache.pig.tools.grunt.Grunt - ERROR 2998: Unhandled internal error. File or directory null does not exist. Details at logfile: /home/hadoop/pig_1279998435024.log -ディレクトリ作成 grunt> mkdir input grunt> ls hdfs://hdp01.sol-net.jp:9000/user/hadoop/input <dir> -ローカルファイルのコピー grunt> copyFromLocal /usr/share/doc/syslinux-3.11/pxelinux.doc input grunt> ls input hdfs://hdp01.sol-net.jp:9000/user/hadoop/input/pxelinux.doc<r 2> 14168 -中身の確認 grunt> cat input/pxelinux.doc PXELINUX A bootloader for Linux using the PXE network booting protocol Copyright (C) 1994-2004 H. Peter Anvin <<省略>>
(4)MapReduce処理
-参考ページ
大規模なデータセットを効率的に扱うための Pig 超入門
-構文のリファレンスはこちら
Pig Tutorial
Pig Latin Reference Manual 1
Pig Latin Reference Manual 2
-Word Countを実行してみる。
grunt> load_data = LOAD 'input/pxelinux.doc' USING PigStorage(' ') AS (row: chararray);
grunt> flated = FOREACH load_data GENERATE FLATTEN(TOKENIZE((chararray)$0));
grunt> grouped = GROUP flated BY $0;
grunt> counted = FOREACH grouped GENERATE COUNT (flated), group;
grunt> dump counted;
grunt> store counted into 'output/result.txt';
良く理解せずに実行したので、なんか結果が怪しかったデス。
dump ・・・結果をその場で表示。 store 結果をファイルに保存
もうちょっとどんな事ができるか研究するつもり。
後は、NameNode以外の周辺クライアントからHadoopを操作する方法も調査せねば。