`
这些年
  • 浏览: 389658 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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 设置环境变量/etc/profile
 本地模式:
    只须要配置java_home即可以运行在本地模式中
    命令:pig -x local
  集群模式:
       1   vim /etc/profile 
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
export PIG_HADOOP_VERSION=20      //支持hadoop版本,我的是hadoop-0.20.2  可无

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

xuqiang@ubuntu:~$ source /etc/profile
     2:修改pig.properties文件
fs.default.name=hdfs://hadoop3
mapred.job.tracker=hadoop3:8021     //jobtracker在哪台机器
 
测试一下pig的安装是否正确:
本地模式
root@ubuntu:~# pig -x local
13/12/14 05:00:18 INFO pig.Main: Logging error messages to: /root/pig_1387026018896.log
2013-12-14 05:00:19,284 [main] INFO org.apache.pig.backend.hadoop.executionengine.HExecutionEngine - Connecting to hadoop file system at: file:///

 集群模式

root@ubuntu:~# pig
13/12/14 05:01:10 INFO pig.Main: Logging error messages to: /root/pig_1387026070803.log
2013-12-14 05:01:11,283 [main] INFO org.apache.pig.backend.hadoop.executionengine.HExecutionEngine - Connecting to hadoop file system at: hdfs://hadoop3
2013-12-14 05:01:11,661 [main] INFO org.apache.pig.backend.hadoop.executionengine.HExecutionEngine - Connecting to map-reduce job tracker at: hadoop3:8021

 

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

 问题:如果每次重新连接服务器执行pig都报:JAVA_HOME is not set.

  觖决:可以修改pig的进脚本:vim /home/gbz/pig/bin/pig(我的pig脚本位置),加入JAVA_HOME=/usr/local/java即可

<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诊断操作

DESCRIBE 返回关系的架构。
DUMP 将关系的内容转储到屏幕。
EXPLAIN 显示 MapReduce 执行计划。

 

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实战,大数据pig实战,大数据pig实战大数据pig实战大数据pig实战

    PIG 实战介绍

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

    apache pig 基础及应用

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

    Programming Pig(pig编程).pdf

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

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

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

    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实战(韩冀中)中文版

    内容全面,对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实战中文版.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 实战 中文版 韩冀中

    内容全面,对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 交互式和...

    Hadoop云计算实战

    《Hadoop云计算实战》全面介绍了云计算的基本概念、Google(谷歌)云计算的关键技术,以及Hadoop云计算的相关配套项目及其实战,包括Hadoop的HDFS、MapReduce、HBase、Hive、Pig、Cassandra、Chukwa及ZooKeeper等...

    《Hadoop实战》(第2版)高清中文版.pdf

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

    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 章...

Global site tag (gtag.js) - Google Analytics