`

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目录下:

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文件:

 

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> 

作者: qiang.xu 发表于 2011-06-06 13:23 原文链接

分享到:
评论

相关推荐

    大数据pig实战

    ### 大数据Pig实战知识点 #### Hadoop数据分析平台背景 在大数据分析领域,Hadoop作为一个开源的分布式存储与计算框架,拥有着广泛的应用。然而,随着数据量的日益增加,对性能的要求越来越高,传统的关系型数据库...

    apache pig 基础及应用

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

    Hadoop实战-附目录

    ##### 3.5 Pig实战 - **Pig Latin语法**:熟悉Pig Latin的基本语法,包括加载数据、转换数据、保存数据等操作。 - **高级功能**:了解Pig提供的高级功能,如JOIN操作、GROUP BY等。 - **自定义函数开发**:学习如何...

    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实战——计算相似专利的...

    Programming Pig(pig编程).pdf

    《Programming Pig》是一本关于Pig编程的实战指南,主要面向希望了解和使用Pig进行数据处理的读者。这本书详细介绍了如何通过Pig实现MapReduce的功能原理,非常适合Pig编程的初学者。 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 Dataflow Scripting with Hadoop 2nd EditionPDF

    8. **案例研究与实战项目**:为了巩固理论知识,书中可能会包含实际案例,让读者学习如何解决特定的数据处理问题,并提供完整的Pig脚本示例。 9. **最新版本特性**:第二版通常会包含Pig的最新版本更新和改进,如新...

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

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

    hadoop实战第二版及源码

    《Hadoop实战第二版》是由陆嘉恒编著的一本深度解析Hadoop技术的专业书籍,其源码的提供为读者提供了亲自动手实践Hadoop的机会,增强了学习效果。Hadoop作为大数据处理领域的基石,它的核心在于分布式存储系统HDFS...

    peppapig_SCSS.rar

    【peppapig_SCSS.rar】是一个压缩包文件,其命名可能源于儿童动画...通过深入学习以上知识点,并结合"peppapig_SCSS.rar"中的源代码,可以逐步构建并理解整个学生选课系统的运作机制,同时提升Django和SCSS的实战技能。

    大数据 hive 实战数据

    此外,Hive还支持与其他大数据组件如Pig、Spark、Impala等集成,以提供更高效的数据处理能力。 总结来说,这个实战数据集为我们提供了研究大数据分析和数据仓库应用的宝贵资源。通过对`video`和`user`数据的Hive...

    Hadoop实战(韩冀中)中文版

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

    实战hadoop

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

    hadoop 实战 中文版

    除了基础的Hadoop知识,书中还会涉及Hadoop生态系统中的其他重要组件,如HBase(一个分布式NoSQL数据库),Hive(基于Hadoop的数据仓库工具),Pig(用于大数据分析的高级脚本语言),以及Spark(一种快速、通用的大...

    实战hadoop中的源码

    《实战Hadoop中的源码》一书,由刘鹏教授编写,旨在引领读者深入理解Hadoop这一开源大数据处理框架的内部机制,为通往云计算的道路上提供一条清晰的路径。Hadoop是Apache软件基金会的重要项目,它以其分布式计算模型...

    hbase 资源合集 hbase 企业应用开发实战 权威指南 hbase 实战 hbase 应用架构

    此外,还讲解了HBase的高级特性,如MapReduce、Hive、Pig等与HBase的集成,以及如何进行复杂的查询操作。 《HBase实战》是一本实践导向的书籍,通过实际的项目案例,展示了HBase在不同场景下的应用,如实时分析、...

    实战hadoop源代码

    6. **Hadoop与其他组件集成**:Hadoop通常与其他大数据工具如Hive、Pig、Spark等配合使用,源代码可能包含这些组件的集成示例。 7. **实战案例**:书中的实战部分可能涉及实际业务场景,如网页点击流分析、日志处理...

    hadoop硬实战

    标题:"Hadoop硬实战"的知识点解析: 1. Hadoop基础知识:Hadoop是一个开源的Java平台,用于存储和处理大型数据集,它通过MapReduce模型来对数据进行分布式处理。Hadoop的核心构成包括HDFS(Hadoop Distributed ...

Global site tag (gtag.js) - Google Analytics