`
ladymaidu
  • 浏览: 679593 次
文章分类
社区版块
存档分类
最新评论

Pig实战

 
阅读更多

1. pig简介

2. 安装pig

3. 实战pig

4. 深入pig

5. 参考资料及代码下载

<1>. Pig简介

pig是hadoop项目的一个拓展项目,用以简化hadoop编程(简化的程度超乎想象啊),并且提供一个更高层次抽象的数据处理能力,同时能够保持hadoop的简单和可靠性。

<2>. 安装pig

2.1 下载pig:[点击下载]pig安装包

2.2 解压下载完成的pig安装包:

xuqiang@ubuntu:~/hadoop/src/pig$ tar zxvf pig-0.8.1.tar.gz

2.3 设置环境变量

xuqiang@ubuntu:~$ vim .bashrc

export PATH=~/hadoop/src/pig/pig-0.8.1/bin/:$PATH
export PIG_HOME=~/hadoop/src/pig/pig-0.8.1/
export HADOOP_CONF_DIR=~/hadoop/src/hadoop-0.21.0/conf
export PIG_CLASSPATH=~/hadoop/src/hadoop-0.21.0/conf
这里需要说明的是pig是能够运行在两种模式下:local模式和mapreduce模式,变量HADOOP_CONF_DIR主要是为了在mapreduce模式下使用。

为了使新设置的环境变量生效,使用如下命令:

xuqiang@ubuntu:~$ source .bash_profile
测试一下pig的安装是否正确:

xuqiang@ubuntu:~$ pig -x local

2011-06-05 17:48:49,480 [main] INFO org.apache.pig.Main - Logging error messages to: /home/xuqiang/pig_1307321329471.log
2011-06-05 17:48:49,926 [main] INFO org.apache.pig.backend.hadoop.executionengine.HExecutionEngine - Connecting to hadoop file system at: file:///
grunt>

此时表明pig已经正确安装。

<3>. Pig实战

在pig下载的安装包,解压完成了之后,有一个tutorial目录,我们使用里面的数据来开始pig学习。如果tutorial目录下没有存在pigtutorial.tar.gz文件的话,那么需要使用ant来编译出这个文件:

xuqiang@ubuntu:~/hadoop/src/pig/pig-0.8.1$ ant

这时ant将会下载依赖的jar的文件,同时将编译出对应版本的pig jar文件。然后进入tutorial目录,执行ant命令:

xuqiang@ubuntu:~/hadoop/src/pig/pig-0.8.1$ cd tutorial/

xuqiang@ubuntu:~/hadoop/src/pig/pig-0.8.1/tutorial$ ant
这时将生成pigtutorial.tar.gz文件,解压该文件形成pigtmp的文件夹。该文件夹结构:

.

|-- excite-small.log
|-- excite.log.bz2
|-- pig.jar
|-- script1-hadoop.pig
|-- script1-local.pig
|-- script2-hadoop.pig
|-- script2-local.pig
`-- tutorial.jar
1 directory, 9 files

我们下面将主要分析excite-small.log文件,该文件的数据结构如下:

UserID TimeStamp SearchQuery

我们首先将excite-small.log加载到一个变量(也称之为alias)中,我们将使用该变量来表示这个数据集:

grunt> log = load 'excite-small.log' as (user, time, query);

注意的是这时pig并没有运行该命令,仅仅是解析了该命令,只有到使用dump命令或者是store命令时pig才会真正执行该命令。dump命令将打印出这个变量的内容,store命令将变量所代表的内容保存到一个文件中。

这时如果想要查看该log的结构:

grunt> describe log;

log: {user: bytearray,time: bytearray,query: bytearray}

这是如果我们想要查看该log文件的前4行的话:

grunt> lmt = limit log 4;

grunt> dump lmt;

这时将打印出log文件的前四行数据。

<4>. 深入pig

4.1 Utility and file commands

4.2 Data read/write operators

4.3 Diagnostic operators诊断操作

4.4 Data type and schemes

pig中有6个基本数据类型和3个复合数据类型,基本数据类型如下:

复合数据类型:

pig中数据模型中能够允许数据类型的嵌套,类似于xml/json格式。

4.5 Expression and functions

pig能够支持常见运算符。

同时在pig中提供了一些内建函数。

这里我们没有给出示例,将在下面给出示例。

4.6 Retional operators

首先编写两个数据文件A:

0,1,2

1,3,4

数据文件B:

0,5,2

1,7,8
运行pig:

xuqiang@ubuntu:~/hadoop/src/pig/pig-0.8.1/tutorial/pigtmp$ pig -x local

2011-06-05 18:46:54,039 [main] INFO org.apache.pig.Main - Logging error messages to: /home/xuqiang/hadoop/src/pig/pig-0.8.1/tutorial/pigtmp/pig_1307324814030.log
2011-06-05 18:46:54,324 [main] INFO org.apache.pig.backend.hadoop.executionengine.HExecutionEngine - Connecting to hadoop file system at: file:///
grunt>

加载数据A:

grunt> a = load 'A' using PigStorage(',') as (a1:int, a2:int, a3:int);

加载数据B:

grunt> b = load 'B' using PigStorage(',') as (b1:int, b2:int, b3:int);

求a,b的并集:

grunt> c = union a, b;

grunt> dump c;

(0,5,2)

(1,7,8)
(0,1,2)
(1,3,4)

将c分割为d和e,其中d的第一列数据值为0,e的第一列的数据为1($0表示数据集的第一列):

grunt> split c into d if $0 == 0, e if $0 == 1;

查看d:

grunt> dump d;

(0,1,2)

(0,5,2)
查看e:

(1,3,4)

(1,7,8)

选择c中的一部分数据:

grunt> f = filter c by $1 > 3;
查看数据f:

grunt> dump f;

(0,5,2)
(1,7,8)
对数据进行分组:
grunt> g = group c by $2;

查看g:

grunt> dump g;

(2,{(0,1,2),(0,5,2)})

(4,{(1,3,4)})
(8,{(1,7,8)})
当然也能够将所有的元素集合到一起:

grunt> h = group c all;

grunt> dump h;

(all,{(0,1,2),(1,3,4),(0,5,2),(1,7,8)})

查看h中元素个数:

grunt> i = foreach h generate COUNT($1);

查看元素个数:

grunt> dump i;

这里可能出现Could not resolve counter using imported: [, org.apache.pig.built in., org.apache.pig.impl.builtin.]的情况,这是需要使用register命令来注册pig对应的jar版本。

接下俩试一下jon操作:

grunt> j = join a by $2, b by $2;
该操作类似于sql中的连表查询,这是的条件是$2 == $2。

取出c的第二列$1和$1 * $2,将这两列保存在k中:

grunt> k = foreach c generate $1, $1 * $2;

查看k的内容:

grunt> dump k;

(5,10)

(7,56)
(1,2)
(3,12)

4.7 Working with UDF(user defined function)

pig能够支持两种类型的UDFs:eval和load/store,其中load/store的自定义函数主要是用来加载和保存特定的数据格式;eval自定义函数主要用来进行常规的数据转换。

1. eval

如果想要实现自定义的eval类型的函数,那么基本的做法是首先编写一个类继承自EvalFunc<T>这个抽象类,同时需要重写这个类的一方法:

abstract public T exec(Tuple input) throws IOException;

该方法传入的类型是Tuple类型。

如果调用udf时使用的是:udf(ARG1, ARG2);那么调用input.get(0)将得到ARG1,同理input.get(1)得到的是ARG2,input.getSize()得到传递的参数的数量,这里就是2.

下面我们就开始编写udf UPPER.java,将UPPER.java文件保存到myudfs目录下:

packagemyudfs;
importjava.io.IOException;
importorg.apache.pig.EvalFunc;
importorg.apache.pig.data.Tuple;
importorg.apache.pig.impl.util.WrappedIOException;

publicclassUPPERextendsEvalFunc<String>
{
publicStringexec(Tupleinput)throwsIOException{
if(input==null||input.size()==0)
returnnull;
try{
Stringstr
=(String)input.get(0);
returnstr.toUpperCase();
}
catch(Exceptione){
throwWrappedIOException.wrap("Caughtexceptionprocessinginputrow",e);
}
}
}

编译该文件,同时生成该jar文件:

xuqiang@ubuntu:~/hadoop/src/pig/pig-0.8.1/myudfs$ javac -cp ../pig.jar UPPER.java

xuqiang@ubuntu:~/hadoop/src/pig/pig-0.8.1/myudfs$ cd ..

xuqiang@ubuntu:~/hadoop/src/pig/pig-0.8.1$ jar -cf myudfs.jar myudfs
准备student_data文件:
student1,1,1
studetn2
,2,2
student3
,3,3
student4
,4,4

在pig中测试该udf:

xuqiang@ubuntu:~/hadoop/src/pig/pig-0.8.1$ pig -x local

注册该udf:

grunt> register myudfs.jar

加载数据:

grunt> A = load 'student_data' using PigStorage(',') as (name:chararray, age:int,gpa:double);
grunt> B = FOREACH A GENERATE myudfs.UPPER(name);
grunt> dump B;
这时将输出:

(STUDENT1)
(STUDETN2)
(STUDENT3)
(STUDENT4)

<5>. 参考资料及代码下载

http://pig.apache.org/docs/r0.8.1/udf.html#How+to+Write+a+Simple+Eval+Function

<Hadoop In Action>

1. 本博客中的文章均是个人在学习和项目开发中总结。其中难免存在不足之处 ,欢迎留言指正。 2. 本文版权归作者和博客园共有,转载时,请保留本文链接。


分享到:
评论

相关推荐

    大数据pig实战

    大数据pig实战,大数据pig实战,大数据pig实战大数据pig实战大数据pig实战

    PIG 实战介绍

    PIG 的新手非常适合的入门 介绍

    apache pig 基础及应用

    apache pig 基础及应用,urldecode row_number web日志分析 根据 用户行为 做出 简易的 相似度 判断。

    Hadoop实战中文版

    10.5.3 关系型运算符 10.5.4 执行优化 10.6 用户定义函数 10.6.1 使用UDF 10.6.2 编写UDF 10.7 脚本 10.7.1 注释 10.7.2 参数替换 10.7.3 多查询执行 10.8 Pig 实战——计算相似专利的例子 10.9 小结 第...

    Hadoop实战中文版.PDF

    18910.5.4 执行优化 19610.6 用户定义函数 19610.6.1 使用UDF 19610.6.2 编写UDF 19710.7 脚本 19910.7.1 注释 19910.7.2 参数替换 20010.7.3 多查询执行 20110.8 Pig实战——计算相似专利的例子 ...

    Hadoop实战(陆嘉恒)译

    用Pig编程10.1 像Pig 一样思考10.1.1 数据流语言10.1.2 数据类型10.1.3 用户定义函数10.2 安装Pig10.3 运行Pig10.4 通过Grunt 学习Pig Latin10.5...10.7.3 多查询执行10.8 Pig 实战——计算相似专利的例子10.9 小结第11 章...

    Hadoop实战

    18710.5.3 关系型运算符 18910.5.4 执行优化 19610.6 用户定义函数 19610.6.1 使用UDF 19610.6.2 编写UDF 19710.7 脚本 19910.7.1 注释 19910.7.2 参数替换 20010.7.3 多查询执行 20110.8 Pig实战——计算相似专利的...

    Hadoop权威指南(中文版)2015上传.rar

    Pig实战 并行处理 参数代换 第12章 Hive 1.1 安装Hive 1.1.1 Hive外壳环境 1.2 示例 1.3 运行Hive 1.3.1 配置Hive 1.3.2 Hive服务 1.3.3 Metastore 1.4 和传统数据库进行比较 1.4.1 读时模式(Schema on Read)vs.写...

    Hadoop权威指南 第二版(中文版)

     Pig实战  并行处理  参数代换 第12章 Hive  1.1 安装Hive  1.1.1 Hive外壳环境  1.2 示例  1.3 运行Hive  1.3.1 配置Hive  1.3.2 Hive服务  1.3.3 Metastore  1.4 和传统数据库进行比较  1.4.1 读时...

    Programming Pig(pig编程).pdf

    pig编程实战详细介绍了实现mr的功能原理,是pig初学者的理想资料。pdf

    Hadoop实战实战-陆嘉恒(高清完整版)

    本书内容全面,对Hadoop整个技术体系进行了全面的讲解,不仅包括HDFS、MapReduce、YARN等核心内容,而且还包括Hive、HBase、Mahout、Pig、ZooKeeper、Avro、Chukwa等与Hadoop技术相关的重要内容。实战性强,不仅为...

    Hadoop实战(韩冀中)中文版

    内容全面,对hadoop整个技术体系进行了全面的讲解,不仅包括hdfs和mapreduce这两大核心内容,而且还包括hive、hbase、mahout、pig、zookeeper、avro、chukwa等与hadoop相关的子项目的内容。实战性强,为各个知识点...

    实战hadoop

    , 该书强调动手、强调实战,以风趣幽默的语言和一系列生动的实战应用案例,系统地讲授了Hadoop的核心技术和扩展技术,包括: HDFS、MapReduce、HBase、Hive、Pig、Cassandra、Chukwa和ZooKeeper等,并给出了3个完整...

    实战Hadop:开启通向云计算的捷径(刘鹏)

     《实战hadoop--开启通向云计算的捷径》强调动手、强调实战,以风趣幽默的语言和一系列生动的实战应用案例,系统地讲授了hadoop的核心技术和扩展技术,包括: hdfs、mapreduce、hbase、hive、pig、cassandra、...

    hadoop 实战 中文版 韩冀中

    内容全面,对hadoop整个技术体系进行了全面的讲解,不仅包括hdfs和mapreduce这两大核心内容,而且还包括hive、hbase、mahout、pig、zookeeper、avro、chukwa等与hadoop相关的子项目的内容。实战性强,为各个知识点...

    实战Hadoop--开启通向云计算的捷径 源代码

    第7章 Pig——一头什么都能吃的猪 (源码下载) 第8章 Facebook的女神——Cassandra (源码下载) 第9章 Chukwa——收集数据的大乌龟 (无源码) 第10章 一统天下——ZooKeeper (源码下载) 第11章 综合实战1——...

    Hadoop实战-附目录

    Hadoop 实战 云计算 书签 Hive Hbase Pig

    Hadoop实战(全面、权威的Hadoop实战教程)中文第一版陆嘉恒著

    内容全面,涵盖Hadoop技术本身和Hive、HBase、Mahout、Pig、ZooKeeper、Avro、Chukwa等所有与Hadoop相关的子项目! 实战性强,为各个知识点精心设计了大量经典的小案例,易于理解,可操作性强!

    Hadoop实战(第2版)

    10.2.1 序列化和反序列化技术点64 载入日志文件10.2.2 UDF、分区、...Pig 流管道11.1 Pig 基础11.1.1 安装11.1.2 架构11.1.3 PigLatin.11.1.4 数据类型11.1.5 操作符和函数11.1.6 交互式和...

Global site tag (gtag.js) - Google Analytics