1,Pig的安装 
   (一)软件要求 
   (二)下载Pig   
   (三)编译Pig 
2,运行Pig 
   (一)Pig的所有执行模式 
   (二)pig的交互式模式 
   (三)使用pig脚本执行模式 
3,Pig  Latin语句的声明 
    (一)加载数据 
    (二)使用和处理数据 
   (三)存储中间数据 
(四)存储最终数据 
(五)调试Pig Latin语言 
4,Pig的属性值管理 
5,Pig一些注意事项

1,Pig的安装 
(一)软件安装 
必须配置: 
(1)hadoop 
下载地址: 
http://hadoop.apache.org/common/releases.html 
可以同时运行不同版本的Pig只要设置相对应的HADOOP_HOME即可,如果你没有设置HADOOP_HOME,pig默认将会运行嵌入式的版本hadoop(1.0.0) 
(2)Java1.6+ 
下载地址: 
http://java.sun.com/javase/downloads/index.jsp 
需要安装JDK,并设置JAVA_HOME 
可选配置: 
python2.5 (如果使用python写UDF时,需要安装) 
JavaScript1.7 (如果使用JavaScript写UDF时,需要安装) 
JRuby1.6.7  (如果使用JRuby写UDF时,需要安装) 
Groovy1.8.6 (如果使用Groovy写UDF时,需要安装 ) 
Ant1.7  (如果需要编译构建,则需要下载安装,搞JAV的,建议安装) 
Junit4.5 (如果需要单元测试,则需要安装) 
(二)下载Pig 
注意以下几点: 
     1,下载最近的而且是稳定版本的Apache Pig 
2,然后解压下载Pig,注意下面二点: 
pig的主脚本文件,pig位于bin目录(/pig.n.n.n/bin/pig),这里面包括了pig的环境变量的定义 
pig的属性文件,pig.properties位于conf目录(/pig.n.n.n/conf/pig.properties)你也可以通过PIG_CONF_DIR环境变量来指定改文件的绝对路径。

3,配置pig的环境变量,如下面的代码: 
$ export PATH=/<my-path-to-pig>/pig-n.n.n/bin:$PATH 
     4,测试pig安装时否成功,使用pig -help命令

(三):编译Pig 
1,从svn导入pig的源代码 
         svn co http://svn.apache.org/repos/asf/pig/trunk 
2,进入pig的根目录下,执行ant命令,编译pig 
3,校验pig.jar,运行一个单元测试ant test 
2,运行Pig

在pig里面,可以使用多种不同的模式运行它:

序号 模式名 是否支持本地模式 Hadoop集群模式 
1 交互式模式 支持 支持 
2 批处理模式 支持 支持

(一)执行模式: 
pig有两种运行模式或者运行类型: 
本地模式:运行本地模式非常简单,你只需要一台机器即可,所有的文件和脚本都在本地磁盘上,指定模式使用命令 pig -x flag (例如: pig -x local),本地模式下不支持MapReduce的(线程)并行,因为在当前的hadoop版本中,hadoop的LocalJobRunner 运行器不是一个线程安全的类。 
hadoop集群模式:hadoop集群模式也称Map Reduce模式,前提是你的机器上已经安装好了hadoop的集群,并能正常运行,集群模式是pig默认的模式,在没有任何声明或指定的情况下,总是会以集群的模式运行pig作业,当然你可以使用命令pig 或者 pig -x mapreduce来指定运行模式 
例子: 
以pig命令方式启动: 
(1):pig -x local (local模式) 
(2)pig -x mapreduce (集群模式) 
以java命令启动模式: 
(1),java -cp pig.jar  org.opache.pig.Main -x local (local模式) 
(2),java -cp pig.jar  org.opache.pig.Main -x mapreduce (集群模式)

(二)交互式模式: 
我们可以使用pig在一个交互式的模式下通过使用grunt shell,调用grunt shell,只需要执行pig命令即可,然后我们就会在命令行,操作pig,例子如下: 
     grunt> A = load 'passwd' using PigStorage(':'); 
     grunt> B = foreach A generate $0 as id; 
     grunt> dump B;

(三)脚本模式 
我们可以把pig的一系列处理,封装成一个pig脚本文件,后缀名以.pig结尾,相信在linux下写过shell脚本的朋友都很好理解,我们把我们的linux命令封装在.sh的脚本里,这样执行起来非常方便,而且容易管理。

假如我们现在有一个test.pig的脚本,那么我们怎么执行呢? 
(1)以local模式运行: pig -x local id.pig 
(2)以集群模式运行: pig -x mapreduce.pig

使用Pig脚本文件的好处:  
我们可以将pig语法声明和pig命令封装在当个pig的脚本文件里,而且以后缀名.pig结尾,非常有利于我们区分这些脚本

我们可以在命令行和grunt shell里面,使用run或exec命令,来运行pig,这里散仙就不举例子了,后面会写文章。 
pig脚本也支持外部传参数,这和shell脚本的传参类似,非常灵活,后面文章会写。

pig的注释: 
(1)多行注释:/*pig脚本语句*/ 
(2)当行注释:- - pig脚本语句 两个 
注意: 
   Pig支持直接运行在HDFS上,Amazon S3,或者其他的一些分布式系统上的脚本或一个jar包,如果是在分布式的系统上,我们在运行时,需要指定网络的url路径,例如: 
  
  $ pig hdfs://nn.mydomain.com:9020/myscripts/script.pig

3,Pig Latin的语句声明:

在pig中,pig latin是使用pig来处理数据的基本语法,这类似于我们在数据库系统中使用SQL语句一样。

我们使用pig latin语句,获取一个输入,然后经过一系列处理之后,会得到一个输出,所以在所有的pig脚本中,只有load(读数据)和store(写数据)两个语句是必不可少的。

除此之外,Pig的语法块可能还会包括,一些表达式和schema,Pig latin可以跨多行命令组成一个span,必须在小括号的模式中,而且以必须以分号结束。 ( ; )

Pig latin语句,通常组织如下: 
(一)一个load声明从文件系统上加载数据 
(二)一系列的的转化语句去处理数据 
(三)一个dump语句,来展示结果或者stroe语句来存储结果

只有Dump和Store语句能产生输出

(一)加载数据: 
使用load操作和(load/store)函数读数据进入Pig(默认的存储模式是PigStorage) 
(二)使用和处理数据 
Pig允许你使用多种方式处理数据,如果我们是刚入门的朋友,熟悉下面的这些操作符,将会有助于我们使用和理解Pig。 
使用filter语句来过滤tuple或一行数据(类似于SQL中的where) 
使用foreach语句来操作列的数据(类似于 select field1,filed 2 , .... from table里面限制列返回。) 
使用group语句来分组. (类似SQL里面的group by) 
使用cogroup, inner join,outer join来分组或关联两个以上的表关联(与SQL里的join类似) 
 使用union语句来合并两个以上关系的结果数据,使用split语句可以把一个表拆分为多个分散的小表(注意,散仙在这里说表,只是为了方便理解,在pig没有表这一个概念,虽然有类似的结构) 
(三)存储中间结果集 
pig生成的中间结果集,会存储在HDFS一个临时的位置,这个位置必须已经在HDFS中存在,这个位置可以被配置使用pig.temp.dir这个属性,默认是存储在/tmp目录,在0.7以前的版本,这个值是固定的,0.7以后,我们可以灵活的更改路径,通过配置

(四)存储最终结果集 
使用store操作和load/store函数,可以将结果集写入文件系统中,默认的存储格式是PigStorage,在我们测试阶段,我们可以使用dump命令,直接将结果显示在我们的屏幕上,方便我们调试,在一个生产环境中,我们一般使用store语句,来永久存储我们的结果集。

(五)调试Pig Latin 
pig提供了一写操作符,来帮助我们调试我们的结果: 
 使用dump语句,显示结果在我们的终端屏幕上 
 使用describe语句,来显示我们的schema的关系(类似查看表的结构) 
 使用explain语句,来显示我们的执行逻辑或物理视图,可以帮助我们查看map,reduce的执行计划 
 使用illustrate语句,可以一步步的查看我们的语句执行步骤

此外,pig还定义了一些非常方面的别名集,来快速帮助我们调试脚本: 
 dump的别名 \d 
 describe的别名 \de 
 explain的别名 \e 
 illustrate的别名  \i 
 退出\q 
4,Pig的属性值 
Pig支持java中的properties文件,我们可以通过使用这个文件来定制pig的行为,我们可以使用help命令,来查看所有的pig的属性值

如何指定一个pig的值?

 通过pig.properties文件,注意需要把这个文件包含在java的classpath中 
 -D 命令在命令行指定一个pig属性 例如:pig -Dpig.tmpfilecompression=true 
 -P命令可以指定自己的一个properties文件。 例如:pig -P mypig.properties 
 set命令,例如:set pig.exec.nocombiner true

注意:properties文件,使用标准的Java的properties文件格式

地方他们的优先级如下: 
pig.properties < -D Pig property < -P properties file < set comman

指定hadoop的文件配置属性与Pig是一样的。

Hadoop和pig的所有属性值,最后都会在pig里统一收集起来,它是有效的对于任何UDF 
例如UDFContext对象,为了访问这些属性,我们可以调用getJobConf方法

4,Pig一些注意事项 
1. 确保你的JDK安装完毕 
2. 确保的你的pig的bin目录执行脚本环境变量已经安装 
export PATH=/<my-path-to-pig>/pig-0.9.0/bin:$PATH 
3. 确保你的PIG_HOME环境变量是有效的 
export PIG_HOME=/<my-path-to-pig>/pig-0.9.0 
4. 配置ant脚本,编译pig的文档 
5. 配置PIG_CLASSPATH,指定集群所需的所有的配置文件,包括hadoop的core-site.xml,hdfs-site.xml和mapred-site.xml 
6. 掌握pig的一些基本UDF函数 
 ExtractHour,提取小时从每行数据中 
 NGramGenerator,生成n-garms的words 
 NonURLDetector,移除一个空的列,或者值是url的数据 
 ScoreGenerator,计算n-garm的分数 
 ToLower,转小写 
 TutorialUtil,分割查询字符串组成一个words

上面的这些UDF是一些比较典型的例子,散仙建议初学者可以先看一看,看不懂也无所谓,UDF使用的几率也不是特别大,最重要的还是基础语法的使用,关于配置环境的安装,如果你用的是原生的Apache Hadoop,则按照上面的步骤来,是非常有效的,因为这个文档,就是参照apache官方的文档翻译的,英文好的,可以直接点击这个链接http://pig.apache.org/docs/r0.12.0/start.html,如果是其他的版本的hadoop,比如CDH或者HDP,你可能使用CM(Cloudera Manager)或者AM(Ambari)来安装,这样就省去自己安装的过程,你可以直接使用Pig来处理数据了,不过,初学者还是建议自己动手折腾一下,后期熟练了,可以用些管理工具,来自动安装,这样能学的更深入些,看完后,有问题的欢迎指正,或者到群公众号留言。


如果有什么疑问,欢迎扫码关注微信公众号:我是攻城师(woshigcs) 
本公众号的内容是有关大数据技术和互联网等方面内容的分享,也是一个温馨的技术互动交流的小家园,有什么问题随时都可以留言,欢迎大家来访! 

Apache Pig入门学习文档(一)的更多相关文章

  1. angular入门学习文档之一

    一.数据双向绑定 angular(下面统一简称ng)强大的地方莫过于它内置的数据双向绑定功能,下面我们通过一个简单的例子来演示ng强大的双向绑定数据的能力. 代码如下: 1.dom结构: 1.< ...

  2. 2013 最新的 play web framework 版本 1.2.3 框架学习文档整理

    Play framework框架学习文档 Play framework框架学习文档 1 一.什么是Playframework 3 二.playframework框架的优点 4 三.Play Frame ...

  3. soapUI学习文档(转载)

    soapUI 学习文档不是前言的前言记得一个搞开发的同事突然跑来叫能不能做个WebService 性能测试,当时我就凌乱了,不淡定啊,因为我是做测试的,以前连WebService 是什么不知道,毕竟咱 ...

  4. Ext JS 6学习文档-第8章-主题和响应式设计

    Ext JS 6学习文档-第8章-主题和响应式设计 主题和响应式设计 本章重点在 ExtJS 应用的主题和响应式设计.主要有以下几点内容: SASS 介绍和入门 主题 响应式设计 SASS 介绍和入门 ...

  5. 全网首发,腾讯T3-3整理Netty学习方案(体系图+项目+学习文档)

    前言: 想要学好一门技术,最起码要对他有一定的了解,起码听说过相应的底层原理的东西吧,最起码你要有一点能和别人交流的内容吧,下面是我精简的一点内容,希望对于大家了解netty能有一点帮助 Netty是 ...

  6. Openstack api 学习文档 & restclient使用文档

    Openstack api 学习文档 & restclient使用文档 转载请注明http://www.cnblogs.com/juandx/p/4943409.html 这篇文档总结一下我初 ...

  7. Openstack python api 学习文档 api创建虚拟机

    Openstack python api 学习文档 转载请注明http://www.cnblogs.com/juandx/p/4953191.html 因为需要学习使用api接口调用openstack ...

  8. .Net 官方学习文档

    .Net 官方学习文档:https://docs.microsoft.com/zh-cn/dotnet/articles/welcome

  9. NodeJS-001-Nodejs学习文档整理(转-出自http://www.cnblogs.com/xucheng)

    Nodejs学习文档整理 http://www.cnblogs.com/xucheng/p/3988835.html 1.nodejs是什么: nodejs是一个是javascript能在后台运行的平 ...

随机推荐

  1. boost相关函数

    1.boost::scoped_ptr是一个比较简单的智能指针,它能保证在离开作用域之后它所管理对象能被自动释放 #include <iostream> #include <boos ...

  2. 【JZOJ4905】【BZOJ4720】【luoguP1850】换教室

    description 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程.在可以选择的课程中,有2n节课程安排在n个时间段上.在第i(1≤i≤n)个时间段上,两节内容相同的课 ...

  3. 【JZOJ6353】给(ca)

    description analysis 很妙的\(DP\) 设\(f[i][j]\)表示已经放了\(i\)个叶子节点.根到当前节点走了\(j\)步向左的方案数 考虑调整\(DP\)方式,钦定伸出左儿 ...

  4. luoguP1154 奶牛分厩 [数论]

    题目描述 农夫约翰有N(1<=N<=5000)头奶牛,每头奶牛都有一个唯一的不同于其它奶牛的编号Si,所有的奶牛都睡在一个有K个厩的谷仓中,厩的编号为0到K-1.每头奶牛都知道自己该睡在哪 ...

  5. https://stackoverflow.com/与程序相关的IT技术问答网站

    https://stackoverflow.com/ Stack Overflow是一个与程序相关的IT技术问答网站.用户可以在网站免费提交问题,浏览问题,索引相关内容,在创建主页的时候使用简单的HT ...

  6. shiro real的理解,密码匹配等

    1 .定义实体及关系 即用户-角色之间是多对多关系,角色-权限之间是多对多关系:且用户和权限之间通过角色建立关系:在系统中验证时通过权限验证,角色只是权限集合,即所谓的显示角色:其实权限应该对应到资源 ...

  7. Big Number HDU - 1212

    As we know, Big Number is always troublesome. But it's really important in our ACM. And today, your ...

  8. LightOJ-1007-Mathematically Hard-欧拉函数打表+前缀和+预处理

    Mathematically some problems look hard. But with the help of the computer, some problems can be easi ...

  9. HDU-2095-find your present (2)-位或/STL(set)

    In the new year party, everybody will get a "special present".Now it's your turn to get yo ...

  10. 02.万恶之源-python 运算符和编码

    一.流程控制语句if: 第一种语法: (最基本的语法) if 条件: 代码块/结果1 结果2 # 如果条件是真(True)执行结果为1,然后结果为2,如果条件为错(False), 直接结果2. 第二种 ...