Apache Pig是一个用于分析大型数据集的平台,其中包括用于表达数据分析程序的高级语言,以及用于评估这些程序的基础结构。 Pig程序的显着特性是它们的结构适于大量并行化,这反过来使得它们能够处理非常大的数据集。
目前,Pig的基础结构层由一个编译器组成,该编译器产生Map-Reduce程序的序列,已经存在大规模并行实现(例如Hadoop子项目)。 Pig的语言层目前由一种称为Pig Latin的文本语言组成,它具有以下主要属性:
易于编程:
实现简单的,“尴尬并行的”数据分析任务的并行执行是微不足道的。由多个相关数据变换组成的复杂任务被显式编码为数据流序列,使其易于编写,理解和维护。
优化机会:
任务编码的方式允许系统自动优化其执行,允许用户专注于语义而不是效率。
可扩展性:
用户可以创建自己的功能来做特殊用途的处理。
下面是我的理解:Apache Pig 是一个高级过程语言,适合于使用 Hadoop 和 MapReduce 平台来查询大型半结构化数据集(简而言之就是查询并分析数据)。通过允许对分布式数据集进行类似 SQL 的查询,Pig 可以简化 Hadoop 的使用。
本地/hadoop启动:
$ pig -x local
$ pig -x hadoop
–
脚本文件方式
$ pig -x mapreduce **.pig
这是**.pig文件
messages = LOAD 'messages';
warns = FILTER messages BY $0 MATCHES '.*WARN+.*';
STORE warns INTO 'warnings';
说明一下:启动前,先启动hadoop (./hdfs-dfs.sh)
$ pig
2011-12-10 06:39:44,276 [main] INFO org.apache.pig.Main - Logging error messages to... 2011-12-10 06:39:44,601 [main] INFO org.apache.pig.... Connecting to hadoop file \ system at: hdfs://0.0.0.0:8020 2011-12-10 06:39:44,988 [main] INFO org.apache.pig.... connecting to map-reduce \ job tracker at: 0.0.0.0:8021
grunt> cd hdfs:///
grunt> ls hdfs://0.0.0.0/tmp
hdfs://0.0.0.0/user
hdfs://0.0.0.0/var
grunt>
运算符
描述
FILTER
基于某个条件从关系中选择一组元组。
FOREACH
对某个关系的元组进行迭代,生成一个数据转换。
GROUP
将数据分组为一个或多个关系。
JOIN
联接两个或两个以上的关系(内部或外部联接)
LOAD
从文件系统加载数据
ORDER
根据一个或多个字段对关系进行排序。
SPLIT
将一个关系划分为两个或两个以上的关系。
STORE
在文件系统中存储数据。
示例:
新建一个学生表(学号,姓名,性别,年龄,所在系)文件student.txt放在/home/tengxing/tmp/下,通过不同方式取出姓名和年龄字段。
201000101:李勇:男:20:计算机软件与理论
201000102:王丽:女:19:计算机软件与理论
201000103:刘花:女:18:计算机应用技术
201000104:李肖:男:19:计算机系统结构
201000105:吴达:男:19:计算机系统结构
201000106:滑可:男:19:计算机系统结构
对应的数据类型:
Student(sno:chararray, sname:chararray, ssex:chararray, sage:int, sdept:chararray)
李勇 20
王丽 19
刘花 18
李肖 19
吴达 19
滑可 19
grunt>
grunt> A =load '/home/tengxing/tmp/pig/student/test.txt' using PigStorage(':') as (sno:chararray, sname:chararray, ssex:chararray, sage:int, sdept:chararray);
grunt> B = foreach A generate sname, sage;
grunt> store B '/home/tengxing/tmp/pig/student/out';
grunt> dump B;
.....
e.util.MapRedUtil - Total input paths to process :1
(李勇,20)
(王丽,19)
(刘花,18)
(李肖,19)
(吴达,19)
(滑可,19)
grunt>\qhi
创建脚本script.pig
A =load '/home/tengxing/tmp/pig/student/test.txt' using PigStorage(':') as (sno:chararray, sname:chararray, ssex:chararray, sage:int, sdept:chararray);
B = foreach A generate sname, sage;
public class PigLocal {
public static void main(String[] args) {
try {
PigServer server = new PigServer("local"); //Local模式
//PigServer server = new PigServer("mapreduce"); //MapReduce模式 run(server);
} catch (Exception e) {
e.printStackTrace();
}
}
private static void run(PigServer server) throws IOException{
server.registerQuery("A = load '/home/tengxing/tmp/pig/student/test.txt' using PigStorage(':')" + " as (sno:chararray, sname:chararray, ssex:chararray, sage:int, sdept:chararray);");
server.registerQuery("B = foreach A generate sname, sage;");
server.store("B", "/home/tengxing/tmp/pig/student/");///home/tengxing/tmp/pig/student/存在要先删除,不然执行会报异常。
}
}
把文件放进HDFS文件系统中,启动start-hdfs..sh