1.Pig安装web
目前最新稳定版为pig-0.12.1,下载解压到/opt/tools/目录下。
shell
因为pig是基于hadoop的上层应用,因此须要先部署好hadoop集群。对于hadoop-0.23.0以上的版本,pig虽然也已经支持,可是须要从新编译pig,否则执行dump命令时会报错显示版本不兼容。数据库
从新编译pig也很简单,只需一条命令便可,在$pig_home/目录下,即/opt/tools/pig-0.12.1/ 下输入:apache
ant -Dhadoopversion=23
若提示ant命令没法找到,直接去apache官网下载ant,解压到/opt/tools/apache-ant-1.9.3vim
cd到pig目录,执行oop
/opt/tools/apache-ant-1.9.3/bin/ant -Dhadoopversion=23
编译可能会好久,可是慢慢等吧,最后显示successful就表示ok了,而后重命名文件学习
mv pig.jar pig-0.12.1.jar mv pig-withouthadoop.jar pig-0.12.1-withouthadoop.jar
接下来配置环境变量 vim /etc/profile
spa
export PIG_HOME=/opt/tools/pig-0.12.1 export PIG_CLASSPATH=$HADOOP_HOME/etc/hadoop export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$HADOOP_HOME/bin:$PIG_HOME/bin:$PATH
保存退出,执行下列命令使之生效
命令行
source /etc/profile
2.Pig学习概要调试
2.1 执行方式
交互式shell(命令行) |
脚本文件(建议以.pig做为扩展名) | |
本地模式 |
pig -x local |
pig -x local log.pig |
Mapreduce模式 |
pig -x mapreduce (或 pig) |
pig -x mapreduce log.pig(或 pig log.pig) |
2.2 执行Pig Latin的通常操做以下:
LOAD : 从文件系统hdfs读取数据
一系列声明(如GROUP,FOREACH,FILTER等)进行数据操做
最后DUMP打印输入结果或者STORE存储数据到hdfs
2.3 调试Pig Latin
DUMP (or \d):输出结果到终端
DESCRIBE (or \de):查看一个关系的结构
EXPLAIN (or \e):查看一个关系的逻辑结构,物理机构和map reduce执行计划
ILLUSTRATE (or \i):查看声明语句的每一步执行状况
2.4 大小写问题
字段名,关系名,和方法名,如PigStorage,COUNT等,是大小写敏感的。
关键字,如LOAD,USING,AS,GROUP,BY,FOREACH,GENERATE,DUMP,STORE等不区分大小写
2.5 数据类型
Complex Types:
关系(relations):一个关系就是一个包,确切的说是一个外包(outer bag),例如A。至关于数据库中的表。
A = LOAD 'student' USING PigStorage() AS (name:chararray, age:int, gpa:float); DUMP A; (John,18,4.0F) (Mary,19,3.8F) (Bill,20,3.9F) (Joe,18,3.8F)
包(bags):一个包是一系列元祖的集合
外包:
B = LOAD 'data' as (f1:int, f2:int, f3;int); DUMP B; (1,2,3) (4,2,1) (8,3,4) (4,3,3)
内包:
X = GROUP C BY f1; DUMP X; (1,{(1,2,3)}) (4,{(4,2,1),(4,3,3)}) (8,{(8,3,4)})
元祖(tuples):一个元祖是一系列有序字段的集合
(John,18,4.0F)
映射(map):映射是一系列键值对的集合
[name#John,phone#5551212]
字段(fields):一个字段就是一个数据
字段能够经过名字或者位置来肯定,如上面例子A,第一列name能够用$0表示,第二例age能够用$1表示。
Simple Types:
int:32bit,如10
long:64bit,如10l或10L
float:32bit,如10.5F
double:64bit,如10.5
chararray:UTF-8格式,如hello world
bytearray:Byte array (blob)
boolean:true/false(or TRUE/FALSE)
datetime:1970-01-01T00:00:00.000+00:00
biginteger:200000000000
bigdecimal:33.456783321323441233442
2.6 Pig Latin中的Nulls
本文将持续更新!!!