Pig Latin: A Not-So-Foreign Language for Data Processing

摘要

越来越多的公司需要分析每天产生的海量数据。也产生了很多平行数据库产品,然而它们的可扩展性的代价很高。

引言

程序员更偏向于使用过程化的代码或者是脚本,而不是声明式的SQL语句

2. 特性及动机

2.1 数据流语言

过程化的,面向程序员的,数据流可控,中间结果可见

2.2 快速上手和通用性

只支持只读数据的处理,因此不需要类似数据库的事务一致性、索引查询的支持,支持直接导入平凡文本文件,这对于处理web log来说非常便利

2.3 嵌套数据模型

例如对于查询每个用户访问量前10的URL这样的请求,嵌套数据模型是极其便利的

2.4 第一公民UDFs

用户自定义函数可以使用在任何地方,而不像SQL中有诸多限制

2.5 并行性的要求

精心选取了容易实现并行性的原语

2.6 调试环境

新颖的高效的调试环境

3. PIG LATIN

在这节中,我们描述Pig Latin语言的细节。在3.1节中,我们描述数据模型及在后继子部分中说明Pig Latin的原则。本节的重点不是Pig Latin的语义细节,而是为了进一步说明在第二节中提到的设计目标及特征。并且这一节,仅关注语言原语,而不涉及到它们如何执行已获得在集群上的并行性。实现在第四节说明。

3.1 数据模型

Pig有一个丰富而简单的数据模型,包括以下四种类型

  • 原子:一个原子包含一个简单原子值如string或者number,例如,'alice'
  • 元组:元组是一系列的域,每一个域可以是任意的数据类型,例如,('alice','lakers')
  • 包:包是元组的集合,元组可能重复,构成包的模式非常灵活,即,并不要求一个包中的所有元组有相同数量及类型的域,例如,公式略
  • Map:Map是一系列数据对象的集合,每个对象有一个关联键值,方便查询,键值只能是原子类型;Map对于经常需要增加字段的情景非常适用

3.2 指定输入数据:LOAD

Pig Latin的第一步是指定数据文件,对数据文件的分词程序,即如何将数据转换为Pig Latin的数据模型。这是LOAD命令的作用。如果没有提供分词程序,Pig Latin也有默认实现。

3.3 每元组处理:FOREACH

对每一元组的操作可以使用FOREACH命令

3.4 丢弃不想要数据:FILTER

顾名思义,通过某些条件,选出想要的数据

3.5 聚合相关联的数据:COGROUP

用于不同数据集,即按某共同属性,聚合数据之后,再做相应处理

3.5.1 COGROUP的特例:GROUP

即单一数据集

3.5.2 Pig Latin中的JOIN

实际上是COGROUP命令结果的FLATTEN后的形式

3.5.3 Pig Latin中的Map-Reduce

有了GROUP和FOREACH命令,在Pig Latin中非常容易表达一个map-reduce程序。

3.6 其他命令

  1. UNION
  2. CROSS
  3. ORDER
  4. DISTINCT

3.7 嵌套操作

3.8 请求输出:STORE

提供自定义输出函数,即如何输出元组

4. 实现

Pig Latin完全由我们的系统Pig实现。Pig是一个允许不同系统被插入作为Pig Latin执行平台的架构。当前的实现使用了开源可扩展的map-reduce实现Hadoop作为执行平台。Pig Latin程序被编译为Map-reduce job,使用Hadoop执行。Pig,以及它的Hadoop编译器是Apache incubator上的开源项目,因此可供大众使用。

4.1 建立逻辑计划

Pig首先将Pig Latin编译为逻辑计划,处理过程只有在STORE命令被调用时,才会被触发

4.2 Map-Reduce计划编译

以(CO)GROUP命令为界,前半部分作为Map任务,后半部分作为Reduce任务;而两个(CO)GROUP之间的命令,当前Pig实现为作为前一个命令的Reduce,因为一般Reduce阶段会减少数据量。

ORDER命令被编译为两个阶段,第一个阶段找出排序键值的中位数,第二阶段利用中位数,进行分区划分,随后本地排序;最后归并为全局排序

4.3 嵌套包的有效性

毋庸置疑,Pig Latin执行过程中会有大量的中间结果,因此会有溢出内存的情况;当然很多情况下,这些中间结果只是逻辑上的因此并不一定占用空间,当确实出现超出内存的情况时,Pig Latin也允许中间结果写入磁盘,使用的是类似数据库的排序算法。

5. 调试环境

Pig Pen是一个可视化的Pig Latin执行环境,供程序员观察Pig Latin语义是否与期望一致

5.1 产生沙箱数据集

Pig Pen底层使用了一系列算法,保证测试数据集的真实性,简洁性及完备性,有效的提高了大数据环境下的调试效率

6. 使用场景

  • 汇总聚合
  • 临时分析
  • 会话分析

7. 相关工作

  • BigTable

Bigtable有hook,不仅可以存储数据,而且在bigtable中的数据可以使用Map Reduce作业分析,分析的引擎仍然是map reduce,仍然有以上说的map recude的缺点。

  • Dryad

Dryad是由微软开发的分布式的平台,提供的大规模并行处理,容错执行任务。
比map reduce更灵活是因为它允许任意计算的执行,可以表示为有向无环图。但是Dryad有自己的高级语言,DryadLINQ。很多程序员都不熟悉这个语言的特点,也导致了它流行不起来。

  • Sawzall

Sawzall是谷歌用在map-reduce层上的一种脚本语言。跟map-reduce一样,Sawzall也有严格的组织习惯。此外,只有过滤阶段可由用户写入,只有一个预先建立的集聚合可用。而pig-latin也有类似的更高层次的原语,如过滤和聚合,可以灵活链接这些。

8. 未来工作

  • 安全优化

我们需要的是一个“安全”的优化,执行优化时,不影响语义。

  • 用户界面

Pig pen朝用户界面增强迈出了第一步。可以有一个用户图形界面观察指定的Pig Latin程序。

  • 外部功能

现在Pig Latin只支持java。很多用户希望它支持python,perl等。

  • 统一的环境

用户在执行pig latin时现在必须处理三种不同的环境:

(a)程序的pig latin命令嵌入

(b)pig latin的环境来了解pig latin的命令,

(c)用来编写UDF环境的编程语言。
我们正在探索具有单一的思想,统一的环境,支持发展在所有三个层次。

9. 总结

我们描述了在Yahoo!上部署的一个新的数据处理环境Pig,及它相关联的语言,Pig Latin。Pig系统编译Pig Latin表达式为一系列map-reduce job,并且精心实现使这些任务在开源可扩展的map-reduce Hadoop上执行。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 198,030评论 5 464
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,198评论 2 375
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 144,995评论 0 327
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,973评论 1 268
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,869评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,766评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,967评论 3 388
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,599评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,886评论 1 293
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,901评论 2 314
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,728评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,504评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,967评论 3 302
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,128评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,445评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,018评论 2 343
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,224评论 2 339

推荐阅读更多精彩内容