pig 简介
Pig可以看做hadoop的客户端软件,可以连接到hadoop集群进行数据分析工作
Pig方便不熟悉java的用户,使用一种较为简便的类似于SQL的面向数据流的语言pig latin进行数据处理
Pig latin可以进行排序、过滤、求和、分组、关联等常用操作,还可以自定义函数,这是一种面向数据分析处理的轻量级脚本语言
Pig可以看做是pig latin到map-reduce的映射器
安装pig
下载并解压pig安装包( http://pig.apache.org/)
设置环境变量
进入grunt shell验证
Pig工作模式
本地模式:所有文件和执行过程都在本地,一般用于测试程序
Mapreduce模式:实际工作模式
[root@hadoop1 pig]# tar zxf pig-0.9.2.tar.gz
[root@hadoop1 pig]# cd pig-0.9.2/bin/
[root@hadoop1 bin]# ./pig -x local
which: no hadoop in (/usr/jdk1.7.0_09/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin)
2014-01-14 05:07:52,637 [main] INFO org.apache.pig.Main - Logging error messages to: /nosql/pig/pig-0.9.2/bin/pig_1389694072631.log
2014-01-14 05:07:52,855 [main] INFO org.apache.pig.backend.hadoop.executionengine.HExecutionEngine - Connecting to hadoop file system at: file:///
grunt> quit
[root@hadoop1 bin]#
#配置pig的map-reduce模式
#JAVA_HOME要设置为JDK的上级目录,之前安装hadoop是配置过JAVA_HOME的,这里需要改一改。
#PATH里面一定要加hadoop的bin目录和pig的bin目录。
[root@hadoop1 ~]# vi .bash_profile
export PATH=$PATH:/nosql/hadoop/hadoop-0.20.2/bin:/nosql/pig/pig-0.9.2/bin
export JAVA_HOME=/usr
export PIG_CLASSPATH=/nosql/hadoop/hadoop-0.20.2/conf
#设置完成后重新登录使环境变量生效
#在用pig连接之前需要先启动hadoop集群
[root@hadoop1 ~]# pig
2014-01-14 05:29:39,444 [main] INFO org.apache.pig.Main - Logging error messages to: /root/pig_1389695379442.log
2014-01-14 05:29:39,726 [main] INFO org.apache.pig.backend.hadoop.executionengine.HExecutionEngine - Connecting to hadoop file system at: hdfs://hadoop1:9000
2014-01-14 05:29:39,896 [main] INFO org.apache.pig.backend.hadoop.executionengine.HExecutionEngine - Connecting to map-reduce job tracker at: hadoop1:9001
grunt> quit
[root@hadoop1 ~]#
Grunt shell命令
Pig的运行方法
脚本
Grunt
嵌入式
#ls、cd、cat
grunt> ls
hdfs://hadoop1:9000/user/root/in
hdfs://hadoop1:9000/user/root/out
hdfs://hadoop1:9000/user/root/test
grunt> cd out
grunt> ls
hdfs://hadoop1:9000/user/root/out/_logs
hdfs://hadoop1:9000/user/root/out/part-r-00000 109
grunt> cat part-r-00000
10086 13599999999|13722222222|18966666666|
120 13599999999|18800000000|
13800138000 13999999999|13722222222|
#copyToLocal
grunt> copyToLocal part-r-00000 test.txt
grunt> sh ls
anaconda-ks.cfg
Desktop
install.log
install.log.syslog
pig_1389694520848.log
test.txt
grunt> sh cat test.txt
10086 13599999999|13722222222|18966666666|
120 13599999999|18800000000|
13800138000 13999999999|13722222222|
#执行操作系统命令:sh
grunt> sh rm -rf test.txt
grunt> sh date
Tue Jan 14 05:34:45 EST 2014
Pig latin
Pig数据模型
Bag:表
Tuple:行,记录
Field:属性
Pig不要求同一个bag里面的各个tuple有相同数量或相同类型的field
Pig latin常用语句
LOAD:指出载入数据的方法
FOREACH:逐行扫描进行某种处理
FILTER:过滤行
DUMP:把结果显示到屏幕
STORE:把结果保存到文件
#例子:
[root@hadoop1 tmp]# cat /tmp/csdn.txt
[root@hadoop1 tmp]# pig -x local
grunt> A = LOAD '/tmp/csdn.txt'
>> USING PigStorage('#')
>> AS (id,pw,em);
grunt> DUMP A
grunt> B = FOREACH A GENERATE em;
grunt> DUMP B;
grunt> STORE B INTO '/tmp/out.txt' USING PigStorage();
[root@hadoop1 out.txt]# cat /tmp/out.txt/part-m-00000