Hadoop Pig简介、安装、试用
来源:互联网 发布:鼠标驱动软件下载 编辑:程序博客网 时间:2024/04/29 04:27
相比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.1.tar.gzexport PIG_INSTALL=/root/pig/pig-0.12.1export PATH=$PATH:$PIG_INSTALL/bin
本地模式
Grunt是Pig的外壳程序(shell)。本地模式下,Pig运行在单个JVM中,访问本地文件系统,该模式用于测试或处理小规模数据集
[root@hadoop-namenodenew pig]# pig -x localgrunt>
MapReduce模式
在MapReduce模式下,Pig将查询翻译为MapReduce作业,然后在Hadoop集群上执行。Pig版本和Hadoop版本间,有要求,笔者这边的版本如下
Hadoop 2.2.0Pig 0.12.1
注意:Pig 0.12.1默认是被编译成与Hadoop的旧版本的,所以这边需要重新编译下Pig,运行如下命令,编译时间比较长,耐心等待。参考时间:16min
ant clean jar-all -Dhadoopversion=23
否则运行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.0export PATH=$PATH:/root/hadoop/hadoop-2.2.0/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]# piggrunt> A = load 'passwd' using PigStorage(':');grunt> B = foreach A generate $0 as id; grunt> dump B;
输出如下:
(省略几万字....)Input(s):Successfully read 29 records (1748 bytes) from: "hdfs://192.168.12.67:8020/user/root/passwd"Output(s):Successfully stored 29 records (325 bytes) in: "hdfs://192.168.12.67:8020/tmp/temp1558767875/tmp-1327634226"Counters:Total records written : 29Total bytes written : 325Spillable Memory Manager spill count : 0Total bags proactively spilled: 0Total records proactively spilled: 0Job 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简介、安装、试用
- Hadoop Pig简介、安装、试用
- Hadoop Pig简介、安装
- Hadoop Pig 安装
- hadoop pig 安装
- Pig简介和安装
- 【hadoop pig】pig安装及使用
- <Hadoop>Pig安装及测试
- hadoop(十二) - pig安装与使用
- Hadoop:pig 安装及入门示例
- Hadoop之Pig从安装到使用
- hadoop pig
- hadoop pig
- Pig简介
- Pig简介
- pig简介
- Mapr 安装hadoop的组件(九)——安装Pig
- Pig系列之一:Pig简介
- 输出技巧方法2种
- 缓存一致性(Cache Coherency)入门
- 列举下iOS8的新特性
- MySQL 状态变量(Server Status Variables)
- USB摄像头出现“Huffman table 0x00 was not defined”解决办法
- Hadoop Pig简介、安装、试用
- CF95C volleyball [最短路+想法]
- 线索二叉树
- 算法面试题集
- 浅谈C++中内存泄漏的检测
- 在Spring下集成ActiveMQ
- VI中的批量替换
- [adoop系列]Pig的安装和简单示例
- directshow媒体播放-即学即会