转http://www.chinacloud.cn/show.aspx?id=59&cid=12
Pig
是yahoo捐献给apache的一个项目,目前还在Apache孵化器中,但是基本功能已经可用了.今天我就给大家介绍这个好用的Pig.Pig是SQL-like语言
,是在MapReduce上构建的一种高级查询语言,把一些运算编译进MapReduce模型的Map和Reduce中,并且用户可以定义自己的功能.Yahoo网格运算部门开发的又一个克隆Google的项目:Sawzall
.
支持的运算
算数符号:+,-,*,/
多种数据类型:string,int,float,long等
比较运算:==, !=, >, >=, <, <=,eq, neq, gt, gte, lt,lte,matches
复杂的数据类型:bag,tuple,map
相关运算:FILTER,GROUP BY,ORDER,DISTINCT,UNION,JOIN,FOREACH ... GENERATE
数据统计:COUNT,SUM,AVG,MIN,MAX等。
pig支持的原始类型数据:int,long,float,double,char数组,byte数组
pig内部的数据类型:
bag:一个tuple的集合,表示方式:{<1,2>,<3,4>}
tuple:一个排序的数组,表示方式:<pig,3.14>
map:一个key,value的map数据,表示方式:['pig':<'load','store'>,'web':'hadoop.apache.org']
atom:单一的原始类型数据,作为string存储,也能转化成数值类型.表示方式:'apache.org'或'2.3'.
数据表示方式:
t = < 1, {<2,3>,<4,6>,<5,7>}, ['apache':'hadoop']>
在上面的例子中一个tuple被引用到t下,因此t有3个域f1,f2,f3,我们可以通过t.f1或t.$0访问到1,通过t.f2或t.$1访
问到{<2,3>,<4,6>,<5,7>},通过t.f3或t.$2访问到
['apache':'hadoop'].
pig可以以local的方式或cluster的方式运行.下面我们还是以处理apache的日志文件开始我们的pig脚本例子来解释pig语言.
我们的日志(access.log)包含许多日的访问日志,我们需要知道在2007年1月30日每一个ip每小时访问页面多少次.在运行程序以前请保证你
运行在java 1.5以上版本,并下载例子文件
.
local方式(仅支持非windows系统):
请把hadoop-site.xml文件删除.运行:
java -cp .:pig.jar org.apache.pig.Main -x local log.pig
cluster的方式(支持windows系统):
保证你的Hadoop的集群版本是0.17.0,修改hadoop-site.xml中的fs.default.name,mapred.job.tracker,mapred.system.dir中的值,使这些值和cluster相同.
java -cp .:pig.jar org.apache.pig.Main log.pig
查看结果:
cat logs/20070130;
脚本解释:
使用Hadoop的copyFromLocal命令拷贝access.log到HDFS
copyFromLocal access.log access.log;
注册包含用户定义功能(UDFs)的jar文件
REGISTER udfs.jar;
设定mapreduce工作名称
set job.name 'hadoop.org.cn log parser';
使用用户定义功能装载log文件
in = LOAD 'access.log' USING cn.org.hadoop.pig.storage.LogStorage();
因为在NSCA log格式中日期格式是"21/Jan/2007:15:29:24 +0800",所以转换成20070121152924格式
gen = FOREACH in GENERATE $0,cn.org.hadoop.pig.time.FormatTime($1),*;
过滤掉非正常的行。
result = FILTER gen BY (NOT IsEmpty($1));
存储结果到HDFS用户的temp目录中
STORE result INTO 'temp';
重新设定mapreduce工作名称
set job.name 'hadoop.org.cn filter parser';
使用默认的功能(PigStorage)装载temp目录中的文件
A = LOAD 'temp' AS (ip,date,method,url,protocol,code,bytes);
提取出日期为2007-01-30日的结果集
B = FILTER A BY (date MATCHES '20070130.*');
因为我们仅仅关心每个小时的结果,所以我们调用用户定义功能ExtractTime,提取一天中的小时
C = FOREACH B GENERATE ip,cn.org.hadoop.pig.time.ExtractTime(date,'8','10') as hour;
使用GROUP功能
D = GROUP C BY (ip,hour);
计算每一个ip每小时访问页面多少次
E = FOREACH D GENERATE flatten($0),COUNT($1);
按小时降序排列
F = ORDER E BY $1 USING cn.org.hadoop.pig.sort.Desc;
存储结果到目录
STORE F INTO 'logs/20070130';
在压缩包的udfs.jar文件中包含源码,压缩包还包含vm下Pig语言高亮的pig.vim代码
pig.vim安装方法:
1.拷贝 pig.vim到~/.vim/syntax/目录下
2. 编辑~/.vimrc 添加下面的行:
augroup filetypedetect
au BufNewFile,BufRead *.pig set filetype=pig syntax=pig
augroup END
分享到:
相关推荐
标题 "基于Hadoop平台的Pig语言对Apache日志系统的分析" 涉及到的主要知识点包括Hadoop、Pig语言以及Apache服务器日志的处理。以下是对这些关键概念的详细解释: 1. Hadoop平台: Hadoop是Apache软件基金会开发的...
Pig基础教程涵盖了Pig语言的基本概念、语法、数据类型、操作符和内置函数,这些都是使用Pig进行数据处理和分析的基础。 首先,教程中会介绍Pig Latin的基本语法约定。Pig Latin语法遵循一定的规则,例如,小括号“...
《Pig语言与Map-Reduce:深入理解pig-0.9.2.tar.gz》 Apache Pig是Hadoop生态系统中的一个高级数据处理工具,它提供了一种面向用户的脚本语言,称为Pig Latin,用于构建Map-Reduce作业。Pig拉丁语简化了大数据处理...
这本书详细介绍了Pig语言的使用,以及如何在Hadoop平台上利用Pig来处理和分析大数据。Pig语言是一种高级的脚本语言,它用于简化在Hadoop上执行的复杂MapReduce程序,具有易于编写、易于维护和易于调试的特点。 ### ...
在本书中,作者提供了丰富的样例脚本、用户定义函数(UDF)以及数据集,帮助读者理解并掌握Pig语言的精髓。Pig是Hadoop生态系统中的一个高级数据处理工具,其设计目标是简化大规模数据集的分析任务,通过提供一种...
《Programming Pig Dataflow Scripting with Hadoop》第二版是一本深入探讨...通过学习这本书,读者不仅能掌握Pig语言的精髓,还能深入了解如何在实际项目中应用Pig进行大数据处理,从而提升数据分析和解决问题的能力。
通过不断实践,可以加深对Pig语言特性的理解,提高数据分析能力。 #### 五、结语 Apache Pig提供了一种强大而灵活的方式来处理大规模数据集。掌握其基础概念和使用方法对于从事大数据分析的人来说至关重要。通过...
IntelliJ - Pig 插件Pig 插件为添加了语言支持。特征查找 UDF 和 Pig 变量的用法和重构支持数据类型自动完成关键字突出显示代码注释/取消注释大括号匹配语法和错误突出显示自定义颜色设置页面安装从 IntelliJ 插件...
其中,“Pig Latin(共36页).pptx”部分专注于Pig语言的学习,Pig是一种高级数据流语言,用于简化在Hadoop上的大规模数据处理。 Pig Latin是Pig的核心,它允许用户以声明性方式编写数据处理任务,而非低级的...
根据提供的文件内容,本部分将详细介绍标题“big data demo”中涉及的几个关键知识点,包括大数据平台Pig的介绍、安装、本地模式运行以及通过Pig语言进行数据处理的基本操作。 ### 大数据平台Pig Pig是Apache基金...
标题“NYSE_dividends”指的是一个与纽约证券交易所(New York Stock Exchange,简称NYSE)相关的数据集,可能包含了关于股票分红或股息...同时,结合其他两个数据集,可以进一步提升对Pig语言和Hadoop生态系统的掌握。
Pig Latin是Pig的核心语言,它是一种声明性语言,允许用户以高级抽象的方式描述数据处理任务,而无需关注底层的MapReduce实现。这种高层面的抽象使得非程序员也能轻松地进行大数据处理,极大地降低了大数据分析的...
Pig是Apache Hadoop生态系统中的一个数据处理框架,它提供了一种高级的编程语言——Pig Latin,用于编写大规模的数据处理作业。源码包是理解Pig工作原理、扩展功能和优化性能的最佳途径。本文将基于"Pig的源码包"这...
Pig是Apache Hadoop项目中的一个高级数据流语言和执行框架,主要用于处理大规模数据集。Pig 0.15版是Pig发展过程中的一个重要里程碑,它的源码为我们提供了深入理解大数据处理框架内部机制的机会。对于初学者来说,...
除此之外,Pig语言为MapReduce编写提供了另一种抽象层面,它允许开发者以更简单的脚本语言来编写MapReduce程序,实现数据的并行处理。Pig编写的MapReduce程序通过Pig Latin语言编写的脚本来执行,Pig Latin提供了一...
Pig是Apache Hadoop项目的一部分,它提供了一个高级数据流语言(Pig Latin)和一个用于处理大规模数据集的执行引擎。本指南将深入探讨Pig编程的核心概念,结合从GitHub下载的"programmingpig-master"源码,为学习者...
在后端开发方面,PIG可能采用了Java、Go或Node.js等语言,结合Spring Boot、Django、Express等框架构建服务。源码将揭示如何设计RESTful API,实现数据库操作(SQL或NoSQL)、事务管理、安全认证(OAuth2、JWT)、...
Apache Pig 是一个用于大数据分析的平台,它提供了一种高级语言 Pig Latin 来处理大规模数据集。Pig-0.17.0 是该平台的一个稳定版本,包含了多项优化和改进,适用于Hadoop生态系统中的数据处理任务。本文将详细介绍...