相比Java的MapReduce api,Pig为大型数据集的处理提供了更高层次的抽象,与MapReduce相比,Pig提供了更丰富的数据结构,一般都是多值和嵌套的数据结构。Pig还提供了一套更强大的数据变换操作,包括在MapReduce中被忽视的连接Join操作。

Hadoop版本:2.2.0

 Pig版本:0.12.1

Pig介绍

Pig包括两部分:

  • 用于描述数据流的语言,称为Pig Latin。
  • 用于执行Pig Latin程序的执行环境,当前有两个环境:单JVM中的本地执行环境和Hadoop集群上的分布式执行环境。

Pig内部,每个操作或变换是对输入进行数据处理,然后产生输出结果,这些变换操作被转换成一系列MapReduce作业,Pig让程序员不需要知道这些转换具体是如何进行的,这样工程师可以将精力集中在数据上,而非执行的细节上。

安装Pig

好,作为一切的开始,我们先安装一个Pig环境。

从http://hadoop.apache.org/pig/releases.html下载稳定版本,当前稳定版本是0.12.1,然后解压到任意目录,并且修改环境变量

tar xzf pig-0.12..tar.gz

export PIG_INSTALL=/root/pig/pig-0.12.
export PATH=$PATH:$PIG_INSTALL/bin

本地模式

Grunt是Pig的外壳程序(shell)。本地模式下,Pig运行在单个JVM中,访问本地文件系统,该模式用于测试或处理小规模数据集

[root@hadoop-namenodenew pig]# pig -x local
grunt>

MapReduce模式

在MapReduce模式下,Pig将查询翻译为MapReduce作业,然后在Hadoop集群上执行。Pig版本和Hadoop版本间,有要求,笔者这边的版本如下

Hadoop 2.2.
Pig 0.12.

注意:Pig 0.12.1默认是被编译成与Hadoop的旧版本的,所以这边需要重新编译下Pig,运行如下命令,编译时间比较长,耐心等待。参考时间:16min

ant clean jar-all -Dhadoopversion=

否则运行Pig任务时,会有如下错误:

 Hadoop: java.lang.IncompatibleClassChangeError: Found interface org.apache.hadoop.mapreduce.JobContext, but class was expected

然后,Pig是放在Hadoop集群上的,所以设置下HADOOP_HOME等环境变量

export HADOOP_HOME=/root/hadoop/hadoop-2.2.
export PATH=$PATH:/root/hadoop/hadoop-2.2./bin

运行Pig的MapReduce模式,命令如下:

pig
或者:pig -x mapreduce

运行Pig程序示例

运行一个简单的示例,就是把linux下的/etc/passwd文件的第一列提取出来输出,用MapReduce模式跑,效果就是输入所有用户名

首先把/etc/passwd文件put到hadoop的hdfs上,命令如下

hadoop fs -put /etc/passwd /user/root/passwd

然后进入Pig shell,运行命令,以':'分隔提取A,然后把A的第一列放入B,dump打出B

[root@hadoop-namenodenew]# pig
grunt> A = load 'passwd' using PigStorage(':');
grunt> B = foreach A generate $ as id;
grunt> dump B;

输出如下:

(省略几万字....)
Input(s):
Successfully read records ( bytes) from: "hdfs://192.168.12.67:8020/user/root/passwd" Output(s):
Successfully stored records ( bytes) in: "hdfs://192.168.12.67:8020/tmp/temp1558767875/tmp-1327634226" Counters:
Total records written :
Total bytes written :
Spillable Memory Manager spill count :
Total bags proactively spilled:
Total records proactively spilled: Job DAG:
job_1401631066126_0005 (省略几万字....) (root)
(bin)
(daemon)
(adm)
(lp)
(sync)
(shutdown)
(halt)
(mail)
(uucp)
(operator)
(games)
(gopher)
(ftp)
(nobody)
(dbus)
(vcsa)
(rpc)
(abrt)
(rpcuser)
(nfsnobody)
(haldaemon)
(ntp)
(saslauth)
(postfix)
(sshd)
(tcpdump)
(oprofile)
(riak)

Pig适用场景

Pig并不适合所有的数据处理任务,和MapReduce一样,它是为数据批处理而设计的,如果想执行的查询只涉及一个大型数据集的一小部分数据,Pig的实现不会很好,因为它要扫描整个数据集或其中很大一部分。

随着新版本发布,Pig的表现和原生MapRedece程序差距越来越小,因为Pig的开发团队使用了复杂、精巧的算法来实现Pig的关系操作。除非你愿意花大量时间来优化Java MapReduce程序,否则使用Pig Latin来编写查询的确能帮你节约时间。

附录:

执行Pig程序的方法

  • 脚本:Pig可以运行包含Pig命令的脚本文件,例如,pig script.pig,对于很短的脚本可以通过使用-e选项直接在命令行中输入脚本字符串。
  • Grunt:Pig shell,就是上文的运行模式
  • 嵌入式方法:也可以在Java中运行Pig程序,和使用JDBC运行SQL程序很像,详情:https://wiki.apache.org/pig/EmbeddedPig

Pig与RDBMS、Hive比较

  • Pig Latin是一种数据流编程语言,而SQL是一种描述性编程语言。换句话说,Pig程序是相对于输入的一步步操作,其中每一步是对数据的一个简答的变换。相反,SQL语句是一个约束的集合,这些约束的集合在一起,定义了输出。
  • 示例也可以看出,Pig其实是对Java的Mapreduce的封装,进一步的抽象,运行的也是java程序,并在此基础上提供其他特性。
  • Hive介于Pig和传统RDBMS(关系数据库管理系统Relational Database Management System)之间,Hive的设计目的是让精通SQL既能的分析师能够在存放在HDFS的大规模数据集上运行查询。
  • Hive在很多方面和传统数据库类似,但是它底层对HDFS和MapReduce的依赖意味着它的体系结构有别于传统数据库。
  • Hive本身不存储数据,完全依赖于HDFS和MapReduce,Hive可以将结构化的数据文件映射为一张数据库表,Hive中表纯逻辑,就是表的元数据。而HBase是物理表,定位是NoSQL。

后记

  • 以上只是简单介绍了下Pig,提供安装和运行demo,也算是对自己知识面的扩充以及加深对Hadoo体系的了解。
  • 关于Pig多值和嵌套的数据结构,以及Join的关系操作都没有涉及,如果后期有深入了解的必要,博文将继续。。。

参考:

http://pig.apache.org/docs/r0.12.1/start.html

http://stackoverflow.com/questions/21300612/error-in-pig-while-loading-data

https://wiki.apache.org/pig/EmbeddedPig

《Hadoop权威指南》

Hadoop Pig简介、安装、试用的更多相关文章

  1. Hadoop:pig 安装及入门示例

    pig是hadoop的一个子项目,用于简化MapReduce的开发工作,可以用更人性化的脚本方式分析数据. 一.安装 a) 下载 从官网http://pig.apache.org下载最新版本(目前是0 ...

  2. [hadoop系列]Pig的安装和简单演示样例

    inkfish原创,请勿商业性质转载,转载请注明来源(http://blog.csdn.net/inkfish ).(来源:http://blog.csdn.net/inkfish) Pig是Yaho ...

  3. Hadoop 之Pig的安装的与配置之遇到的问题---待解决

    1. 前提是hadoop集群已经配置完成并且可以正常启动:以下是我的配置方案: 首先配置vim /etc/hosts 192.168.1.64 xuegod64 192.168.1.65 xuegod ...

  4. 大数据笔记(十七)——Pig的安装及环境配置、数据模型

    一.Pig简介和Pig的安装配置 1.最早是由Yahoo开发,后来给了Apache 2.支持语言:PigLatin 类似SQL 3.翻译器 PigLatin ---> MapReduce(Spa ...

  5. Hortworks Hadoop生态圈简介

    Hortworks 作为Apache Hadoop2.0社区的开拓者,构建了一套自己的Hadoop生态圈,包括存储数据的HDFS,资源管理框架YARN,计算模型MAPREDUCE.TEZ等,服务于数据 ...

  6. hadoop pig入门总结

    在这里贴一个pig源码的分析,做pig很长时间没做笔记,不包含任何细节,以后有机会再说吧 http://blackproof.iteye.com/blog/1769219 hadoop pig入门总结 ...

  7. Hadoop完全分布式安装教程

    一.软件版本 Hadoop版本号:hadoop-2.6.0.tar: VMWare版本号:VMware-workstation-full-11.0.0-2305329 Ubuntu版本号:ubuntu ...

  8. Hadoop完全分布式安装

    一.软件版本 Hadoop版本号:hadoop-2.6.0.tar: VMWare版本号:VMware-workstation-full-11.0.0-2305329 Ubuntu版本号:ubuntu ...

  9. Spark简介安装和简单例子

    Spark简介安装和简单例子 Spark简介 Spark是一种快速.通用.可扩展的大数据分析引擎,目前,Spark生态系统已经发展成为一个包含多个子项目的集合,其中包含SparkSQL.Spark S ...

随机推荐

  1. js为空的几种情况

    1.null,对象不存在 var ii= document.getElementById("id"); alert(ii); 当前页面不存在id对象 2. undefined  v ...

  2. C/C++中extern关键字解析

    1 基本解释:extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义.此外extern也可用来进行链接指定. 也就是说extern ...

  3. Golang 文件服务器小结

    花了一个星期学习文件服务器,老是在一些地方搞混,整理一下所学的,清晰了不少. 学Go半个月,还有很多不懂的地方,有理解错误的,还望高手指出. 注:以下代码中,w为http.ResponseWriter ...

  4. Django + Apache + 树莓派 搭建内网微信公众号服务器

    其实早在微信开放公众号开发平台时就想弄一个自己的公众号服务器,奈何对web服务器搭建和开发一窍不通,只是注册了一下开发者帐号,并没有采取行动,万恶的拖延症. 前一年,开始接触python,打开了神奇世 ...

  5. DHCP配置

    DHCP服务器IP:192.168.1.10 一,安装dhcp [root@localhost ~]# yum install dhcp Loaded plugins: product-id, sub ...

  6. matplotlib 随记

    1.安装 window平台下推荐安装Enthought canopy,包含matplotlib和它所依赖的包: linux下一般默认内置了matplotlib,直接使用就可以了.   2.在没有图形界 ...

  7. Linux中的工作管理(Job Control )

    以前使用Linux老是会不小心按下Ctrl + z,然后就出现看不懂的情况,以为程序突然就没了,今天专门研究了下Linux下的几个快捷键和工作管理. 其中找到一篇很不错的文章,大部分是里面转载的. 原 ...

  8. exec、source以及bash的区别(zz)

    在bash shell中,source.exec以及sh都可以用来执行shell script,但是它们的差别在哪里呢? sh:父进程会fork一个子进程,shell script在子进程中执行 so ...

  9. 在ASP.NET MVC中使用Juqery实现页面局部刷新

    自己做的一个实验,留作备忘,此实例包括扩一下几个文件: 1.MyMovieController.cs 2.Index.aspx 3.ViewUserControl1.ascx 4.movie类 其中M ...

  10. R语言读取excel文件的3种方法

    R读取excel文件中数据的方法: 电脑有一个excel文件,原始的文件路径是:E:\R workshop\mydata\biom excel数据为5乘2阶矩阵,元素为                ...