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安装包:

[email protected]:~/hadoop/src/pig$ tar zxvf pig-0.8.1.tar.gz

2.3 设置环境变量

[email protected]:~$ 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模式下使用。

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

[email protected]:~$ source .bash_profile

测试一下pig的安装是否正确:

[email protected]:~$ 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来编译出这个文件:

[email protected]:~/hadoop/src/pig/pig-0.8.1$ ant

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

[email protected]:~/hadoop/src/pig/pig-0.8.1$ cd tutorial/

[email protected]:~/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:

[email protected]:~/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目录下:

package myudfs;
import java.io.IOException;
import org.apache.pig.EvalFunc;
import org.apache.pig.data.Tuple;
import org.apache.pig.impl.util.WrappedIOException;

public class UPPER extends EvalFunc<String>
{
    public String exec(Tuple input) throws IOException {
        if (input == null || input.size() == 0)
            return null;
        try{
            String str = (String)input.get(0);
            return str.toUpperCase();
        }catch(Exception e){
            throw WrappedIOException.wrap("Caught exception processing input row ", e);
        }
    }

}

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

[email protected]:~/hadoop/src/pig/pig-0.8.1/myudfs$ javac -cp ../pig.jar UPPER.java

[email protected]:~/hadoop/src/pig/pig-0.8.1/myudfs$ cd ..

[email protected]:~/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:

[email protected]:~/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>

转:http://www.cnblogs.com/xuqiang/archive/2011/06/06/2073601.html

时间: 2024-11-05 06:04:50

Pig实战的相关文章

Hadoop、Pig、Hive、NOSQL 学习资源收集

(一)hadoop 相关安装部署 1.hadoop在windows cygwin下的部署: http://lib.open-open.com/view/1333428291655 http://blog.csdn.net/ruby97/article/details/7423088 http://blog.csdn.net/savechina/article/details/5656937 2.hadoop 伪分布式安装: http://www.thegeekstuff.com/2012/02/

Hadoop分布式平台的大数据解决方案

讲师:迪伦 对这个课程有兴趣的可以加我qq2059055336联系我 1 课程背景 GREENPLUM适用场景 Greenplum的架构采用了MPP(大规模并行处理).在 MPP 系统中,每个 SMP 节点也可以运行自己的操作系统.数据库等,它的特点主要就是查询速度快,数据装载速度快,批量DML处理快.而且性能可以随着硬件的添加,呈线性增加,拥有非常良好的可扩展性.因此,它主要适用于面向分析的应用.比如构建企业级ODS/EDW,或者数据集市等等. GREENPLUM运行的平台 GREENPLUM

Pig安装及本地模式实战

Pig是Apache的一个开源项目,用于简化MapReduce的开发,实质Pig将转化为MapReduce作业,使开发人员更多专注数据而不是执行的本质,是不懂java人员的福利. Pig由以下两部分组成: 1.表达数据流的语言,成为Pig Latin. 2.运行Pig Latin程序的执行环境.目前有两种环境:在单个JVM本地执行和在HADOOP集群上分步执行 废话不多说,实战起来: 和Apache其他项目一样,安装Pig都很简单,在/etc/profile文件中设置环境变量. #set pig

Apache Pig字符串截取实战小例子

记录一个Pig字符串截取的实战小例子: 需求如下,从下面的字符串里提取出第2列(冒号后面)的值: Java代码   1 2  3 4 a:ab#c#d a:c#c#d a:dd#c#d a:zz#c#d 如果是在java里,方法可能有很多种,比如substring,或者split多次等,在pig也大致如此,可以使用SUBSTRING内置函数来完成,但散仙推荐使用下面的方式,这种方式比较灵活,适合大部分场景的数据提取,需要用到的2个函数如下: (1)REGEX_EXTRACT('原始字符串','正

MapReduce编程实战之“高级特性”

本篇介绍MapReduce的一些高级特性,如计数器.数据集的排序和连接.计数器是一种收集作业统计信息的有效手段,排序是MapReduce的核心技术,MapReduce也能够执行大型数据集间的""连接(join)操作. 计数器 计数器是一种收集作业统计信息的有效手段,用于质量控制或应用级统计.计数器还可用于辅助诊断系统故障.对于大型分布式系统来说,获取计数器比分析日志文件容易的多. 示例一:气温缺失及不规则数据计数器 import java.io.IOException; import

基于Hadoop2.0、YARN技术的大数据高阶应用实战(Hadoop2.0\YARN\Ma

Hadoop的前景 随着云计算.大数据迅速发展,亟需用hadoop解决大数据量高并发访问的瓶颈.谷歌.淘宝.百度.京东等底层都应用hadoop.越来越多的企 业急需引入hadoop技术人才.由于掌握Hadoop技术的开发人员并不多,直接导致了这几年hadoop技术的薪水远高于JavaEE及 Android程序员. Hadoop入门薪资已经达到了8K以上,工作1年可达到1.2W以上,具有2-3年工作经验的hadoop人才年薪可以达到30万—50万. 一般需要大数据处理的公司基本上都是大公司,所以学

Hadoop企业级完整训练:Rocky的16堂课(HDFS&amp;MapReduce&amp;HBase&amp;Hive&amp;Zookeeper&amp;Sqoop&amp;Pig&amp;Flume&amp;Project) - 0515

Hadoop是云计算的事实标准软件框架,是云计算理念.机制和商业化的具体实现,是整个云计算技术学习中公认的核心和最具有价值内容. 如何从企业级开发实战的角度开始,在实际企业级动手操作中深入浅出并循序渐进的掌握Hadoop是本课程的核心.   云计算学习者的心声: 如何从企业级开发的角度,不断动手实际操作,循序渐进中掌握Hadoop,直到能够直接进行企业级开始,是困惑很多对云计算感兴趣的朋友的核心问题,本课程正是为解决此问题而生,学习者只需要按照一步步的跟着视频动手操作,即可完全无痛掌握Hadoo

大数据之pig 命令

1.pig与hive的区别 pig和hive比较类似的,都是类sql的语言,底层都是依赖于hadoop    走的mapreduce任务.    pig和hive的区别就是,想要实现一个业务逻辑的话,使用pig需要一步一步操作    而使用hive的话一条SQL就可以搞定.    如果想在很短时间内获取一个比较复杂的业务逻辑处理结果的话,建议使用pig.    如果需要定时执行的一些任务,建议使用hive. 2:pig和mapreduce对比 pig优点:针对一些基本的处理逻辑,已经做好了封装,

Hadoop企业级完整训练:HDFS&amp;MapReduce&amp;HBase&amp;Hive&amp;Zookeeper&amp;Pig&amp;Project)

Hadoop是云计算的事实标准软件框架,是云计算理念.机制和商业化的具体实现,是整个云计算技术学习中公认的核心和最具有价值内容. 如何从企业级开发实战的角度开始,在实际企业级动手操作中深入浅出并循序渐进的掌握Hadoop是本课程的核心. 云计算学习者的心声: 如何从企业级开发的角度,不断动手实际操作,循序渐进中掌握Hadoop,直到能够直接进行企业级开始,是困惑很多对云计算感兴趣的朋友的核心问题,本课程正是为解决此问题而生,学习者只需要按照一步步的跟着视频动手操作,即可完全无痛掌握Hadoop企