- 5
- 0
- 约3.37千字
- 约 20页
- 2018-06-25 发布于湖北
- 举报
Pig是一个用来处理大规模数据集的平台,和Google的Sawzall类似,由Yahoo!贡献给Apache。 MapReduce的查询框架虽然主要是Map和Reduce两个函数,但是用户从编写程序到在集群中部署、运行,仍然要花费不少时间。 Pig可以简化MapReduce任务的开发,提高在Hadoop集群上进行数据处理的方便程度。 Pig的基本框架 Cluster Pig Latin MapReduce Pig Latin:Pig专用的语言,是类似于SQL的面向数据流的语言。能够对数据进行排序、过滤、求和、分组、关联等功能。 MapReduce:当需要处理海量数据时,先用Pig Latin语言编写Pig Latin程序,然后在Pig中执行 Pig Latin程序。 Pig把用户编写的Pig Latin程序编译成MapReduce作业,上传到集群中运行。 MapReduce虽然是现在处理海量数据的主要方法,但是对于数据处理它仍然存在不足之处。 固定的数据流处理过程 其他操作需要用户自己动手编写 Join, filter, projection, aggregates, sorting, distinct 语义被隐藏在map和reduce函数中,使其难以维护、扩展或者被优化 M R Pig Latin则能很好的解决上述问题。它是一种类SQL的面向数据流的语言。它提供了对数据的排序、过滤、分组、求和、关联等功能,同时也运行用户自定义一些函数,称为UDF(user-defined functions)。 与编写MapReduce程序相比,Pig Latin程序可以大大减少代码量。Pig可以自动对集群进行分配和回收,并且自动的对MapReduce程序进行优化,用户可以将精力放在程序功能的实现上。 数据模型 Field:存放一个原子的数据。 Tuple:Field的序列,其中的每一个Field可以是任何一种数据类型 Bag:Tuple的集合,每个Tuple可以包含不同数目不同类型的Field。如下图 Map:一组键值对的组合,一个关系中的键值对必须唯一。 Pig Latin 的数据模型是可以嵌套的 (‘lucy’, ‘1234’) (‘jack’, (‘iPod’, ‘apple’)) 数据类型 类型 说明 示例 int 有符号的32位整数 127 long 有符号的64位整数 127L float 32位浮点数 3.14F double 64位浮点数 3.14 chararray UTF-8格式的字符数组 Hello World bytearray Byte数组 运算符 算术运算符 操作 符号 说明 相加 + 相减 - 相乘 * 相除 / 取模 % 对整型有效(int, long) Bincond ?: 条件?成立时的值;不成立时的值 运算符 Bicond运算符举例 gruntA = LOAD ‘data.txt’ AS (f1:int, f2:int, B:bag{T:tuple(t1:int, t2:int)}); gruntDUMP A; (3, 2, {(1, 7), (3, 5)}) (3, 3, {(1, 7), (3, 5)}) (3, 5, {(1, 7,), (3, 5), (4, 6)}) 执行下面的操作: gruntX = FOREACH A GENERATE f2, (f2 == 2 ? 1 : COUNT(B)); gruntDUMP X; (2, 1) (3, 2L) (5, 3L) 运算符 比较运算符 操作 符号 说明 相等 == 不等 != 小于 大于 小于或等于 = 大于或等于 = 模式匹配 matches Matches左边是表达式,右边是字符串常量 常用操作 操作名称 功能 LOAD 载入待处理的数据 FOREACH 逐行处理Tuple FILTER 过滤不满足条件的Tuple DUMP 将结果打印到屏幕 STORE 将结果保存到文件 实例分析:在每个category中找到最访问的10个页面 Visits Url Info Url Category PageRank News 0.9 News 0.8 Photos 0.7 Sports 0.9 User Url Time Amy 8:00 Amy 10:00 Amy 10:05 Fred 12:00
原创力文档

文档评论(0)