PIG 学习笔记1

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

posted @ 2011-09-08 12:27  woailuo  阅读(408)  评论(0编辑  收藏  举报