PIG LATIN分析报告.doc
上传人:sy****28 上传时间:2024-09-13 格式:DOC 页数:4 大小:24KB 金币:16 举报 版权申诉
预览加载中,请您耐心等待几秒...

PIG LATIN分析报告.doc

PIGLATIN分析报告.doc

预览

在线预览结束,喜欢就下载吧,查找使用更方便

16 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

PIGLATIN分析报告PIGLATIN简介对海量数据的按需分析处理需求不断增加,尤其是对于因特网公司,它们的技术革新主要依赖于对每天收集的数据的分析处理能力。要提高如此巨大数据集的存储和分析效率,必须采用高度并行的系统,例如:shared-nothingcluster。并行数据库产品,如:Teradata提供了一种解决方案,但是这种方案的web规模扩展开销太大,性价比不高,而且为程序员提供了一种不太自然的编程语言-SQL。事实上很多程序员更加偏爱过程式程序设计语言,因为这种语言的数据流更加清晰,便于分析和调试。这也是map/reduce编程模型流行的原因之一。另外map/reduce的运行于普通商业硬件组成的集群,软件框架保证了可靠性和可用性,通过低端硬件实现了高性能计算,这也是map/reduce的优势所在。尽管如此,map/reduce也存在一些限制,它的单输入,两阶段数据流编程模式过于苛刻,对于超出该限制之外的数据分析任务,需要进行一些额外的数据转换。另外,它没有通用操作子,即使是对最通用的操作,projection和filtering。如:这些限制导致map/reduce代码重用性和可维护性不高,任务的分析语义不够清晰,将对系统性能优化造成影响。基于以上问题,Yahoo!开发了一种新的基于数据流的大规模数据分析处理语言-PigLatin,该语言借鉴了SQL和map/reduce两者的优点,既具有类似SQL的灵活可变式性,又有过程式语言的数据流特点。首先以一个例子来直观感受PigLatin的特点:假设我们有一个表urls:(url,category,pagerank)下面是一个简单的SQL查询,对每个足够大的分类,找出其包含的高pagerank的平均值。查询如下:SELECTcategory,AVG(pagerank)FROMurlsWHEREpagerank>0.2GROUPBYcategoryHAVINGCOUNT(*)>106与上述SQL等价的PigLatin程序如下:good_urls=FILTERurlsBYpagerank>0.2;groups=GROUPgood_urlsBYcategory;big_groups=FILTERgroupsBYCOUNT(good_urls)>106;output=FOREACHbig_groupsGENERATEcategory,AVG(good_urls.pagerank);可见,PigLatin是一种一步一步顺序执行的编程语言,每一步都完成一次数据转换。这种风格为很多程序员所喜爱。同时每步的转换也都是高级抽象,例如:filtering,grouping,aggregation,抽象级别类似于SQL。事实上,PigLatin程序更像是对查询执行计划的规范。因此更易于程序员理解和控制。PigLatin的实现系统叫pig,Yahoo!的程序员使用pig对大规模数据进行分析处理。PigLatin程序被编译为mapreduce作业,在hadoop上执行。特点和动机数据流语言PigLatin语言在编程风格上与SQL有明显差别,前者凸显了程序的执行数据流,后者只关注最终结果。SQL更适合于编程经验不丰富的程序员,适闲?规模数据集;PigLatin更适合有经验的程序员和大规模数据集。尽管PigLatin程序提供了显示的操作序列,但实际的执行计划不一定按照该顺序执行,编译器会根据一定的规则对执行顺序进行一定的优化。举例如下:假设某人对类型为spam网页的url感兴趣,并且要求高pagerank,则实现为:spam_urls=FILTERurlsBYisSpam(url);highPR_spam_urls=FILTERspam_urlsBYpagerank>0.8按照上述给出的语句,程序会先找出所有的spamurl,然后按照pagerank对spamurl进行过滤。但是这种执行顺序可能是不高效的,尤其是当isSpam(url)是一个用户定义的大开销函数时。显然,这种情况下更高效的方式是先对全部url按照pagerank进行过滤,再对过滤后的url集合判别是否是spam_url,得出最终想要的结果集合。快速开始和协同工作能力Pig支持对各种存储格式的查询处理,前提是用户要给出特定的处理函数,该函数能够分析文件内容,提取需要的元组,因此Pig不需要像传统数据库管理系统那样在查询数据之前要花费大量时间导入数据。类似地,Pig程序的输出也会按照用户自定义函数将元组类型转换为特定格式的字节序列。这就简化了后续应用程序对Pig输出结果的使用,例如可视化应用程序或者类Exel的电子表格应用程序。在像Yahoo!这样的大公司里,数据生态系统中包含大量的应用