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) 
本公众号的内容是有关大数据技术和互联网等方面内容的分享,也是一个温馨的技术互动交流的小家园,有什么问题随时都可以留言,欢迎大家来访! 

最新文章

  1. snprintf 使用注意
  2. 使用SVN同步资源后图标样式的详细解读
  3. Scramble String
  4. c# XML省市联动
  5. dojo 四 类的构造函数和父方法的调用
  6. CSS居中的方法总结
  7. Hibernate框架学习之注解配置关系映射
  8. 在Ubuntu14.04下安装 ffmpeg-2.4.13(处理视频用,将视频保存为图片序列)
  9. 一步一步从原理跟我学邮件收取及发送 5.C语言的socket示例
  10. Spring 回滚事务@Transactional
  11. 【Java】 剑指offer(40) 最小的k个数
  12. UnityShader中的语义相关
  13. 有一个问题关于stl函数中的算法问题
  14. .net core json配置相关用法
  15. multi role
  16. nginx 访问频率控制
  17. oracle 产生随机数
  18. steam
  19. ionic3之自定义tabs菜单图标
  20. windows系统 安装MongoDB

热门文章

  1. bzoj1568 Blue Mary
  2. [JZOJ4616] 【NOI2016模拟7.12】二进制的世界
  3. Windows del
  4. identifier of an instance of xx.entity was altered from xxKey@249e3cb2 to xxKey@74e8f4a3; nested exception is org.hibernate.HibernateException: identifier of an instance of xxentity was altered from错误
  5. Vue+Iview+Node 登录demo
  6. SpringCloud网关无法加载权限及IP黑名单白名单
  7. System.DateTime.cs
  8. PAT甲级——A1117 Eddington Number【25】
  9. javaweb中静态文件的处理方法
  10. 论文翻译——Fast-R-CNN(端到端开篇, End to end)