PIG是个很好的大数据查询的工具,刚好参加一个项目用到了PIG,机会难得,学习学习。
1. 执行模式
- 本地模式,在同一个JVM中运行,访问本地文件系统,适用于小数据集,使用时加上参数 –x local 或 –exectype local。
- hadoop模式,在hadoop集群中运行,适用于海量数据集。
hadoop模式配置
- 设置环境变量PIG_HADOOP_VERSION,如 export PIG_HADOOP_VERSION=18
- 设置hadoop job tracker 和 namenode 的地址(有两种方案)
如果有hadoop site的配置文件,且定义了fs.default.name和mapred.job.tracker,可以将含有改配置文件的文件夹的路径设置给环境变量PIG_CLASSPATH,如 export PIG_CLASSPATH=$HADOOP_INSTALL/conf
也可以创建一个配置文件pig.properties,在该配置文件中设置fs.default.name和mapred.job.tracker的值, 如:
fs.default.name=hdfs://localhost:9100
mapred.job.tracker=localhost:9000
2. Run PIG 程序
有三种方式可以run pig程序,script/grunt/embeded
script,直接run一个pig command script file。
grunt,交互式命令行。
embeded,在java中运行pig program。
3. An Example
records = LOAD 'input/ncdc/micro-tab/simple.txt' >> AS (year:chararray,temperature:int,quality:int);
- 该语句读取源数据
- 输入是以 TAB 键分割的
- chararray相当于java的string, int相当于java的int
- LOAD 后接着用文件路径,文件路径可以是本地文件,或者是HDFS URI- AS(可选)给每一个field命名,以便后续的语句引用
- LOAD 的输出是一个关系(relation),它类似于数据库表的元组集合,由多个field组成,每个field都有名字。DESCIBE操作符可以查看输出关系的结构,DUMP操作符可以查看结果。
filtered_records = FILTER records BY temperature != 9999 AND ( quality ==0 OR quality ==1 OR quality ==4 OR quality ==5 OR quality ==9);
- 该语句过滤了一些无效的数据
grouped_records = GROUP filtered_records BY year;
- 该语句根据年份来进行分组
max_temp = FOREACH grouped_records GENERATE group,MAX(filtered_records.temperature);
- FOREACH 处理每一行的数据, GENERATE 关键字定义输出的数据,这里的输出是 年份(group)和该年的最高温度
- MAX是内置的一个函数,用于计算最大值
4. PIG 语句基本上由三部分组成
- LOAD语句或load/store函数, 读取数据,PigStorage是默认的load函数
- 数据处理语句
FILTER
FOREACH
GROUP
COGROUP
INNER JOIN
OUTER JOIN
UNION
SPLIT
- DUMP or STORE 语句,查询或保存结果, PigStorage是默认的store函数
5. Debug
DUMP
DESCRIBE
EXPLAIN
ILLUSTRATE