- 1、本文档共7页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
让Pig在风暴飞驰——Pig On Storm
让Pig在风暴中飞驰——Pig On Storm
1、以PigOnStorm直面实时应用开发面的挑战
在TRC(Tencent Realtime Computing)系统中TDProcess负责为各个应用提供实时计算的能力和服务,Storm是TDProcess的核心部件,虽然Storm已经成为开源流式计算领域的实际标准,但其生态系统远没有Hadoop完善,在Storm之上没有像Hive、Pig这类解放应用开发人员的效率提升工具,所以当你决定使用Storm来实现某个应用时,必须首先去熟悉Storm的原理以及API,然后才能基于API编写程序。熟悉Hadoop的应用开发人员可能有这样的感受,对于一般的数据分析应用,用Hive或者Pig去编写程序,比直接用MapReduce效率要高很多,后期程序维护过程中修改Hive、Pig脚本也比MapReduce程序简单很多。因此在Storm之上提供一门高度抽象的编程语言,其对应用开发效率的提升将不亚于Hive SQL、Pig Latin之于MapReduce,在带来成倍的开发效率提升的同时也降低了应用开发的门槛。
2、Pig On Storm的实现
2.1 Pig On Storm VS Hive On Storm
Pig和Hive对开发人员分别提供Pig Latin和Hive SQL编程语言,Hive SQL跟标准的SQL相似,因此具有更广的群众基础,所以Hive很容易被新用户所接受;但是我们认为Pig Latin更加适合作为Storm的应用编程语言,理由如下:
1) Pig Latin在数据模型上支持复杂嵌套的数据结构,因此其更加适合处理半结构化、非结构化数据。
非结构化数据在实时计算场景下广泛存在的,例如我们经常需要将Storm处理的中间数据(嵌套或者复杂的数据结构)以PB格式的方式存储在外部存储中;从外部系统流入到Storm的数据也存在PB等复杂数据结构的情况。
2) Pig Latin作为面向过程的语言,其更加适合于复杂业务逻辑的表达。
Storm广泛应用在实时数据分析统计、ETL、在线机器学习等领域,对于一般的数据分析统计、ETL应用场景,无论是Hive SQL还是Pig Latin都可以满足,但是对于像在线机器学习、实时推荐这类业务逻辑往往非常复杂的场景,Pig Latin作为面向过程的语言,在解决这种问题时比起SQL这类面向结果的描述语言显得更加优雅。
3) Pig Latin较SQL在语法层面少了很多约束和限制,因此在Pig Latin上开展流式计算相关的功能扩展则更加容易。
2.2 Pig On Storm的实现思路
Pig的架构大致如下图所示,即一个Pig Latin脚本经过Antlr处理转变为AST(抽象语法树)和Logical Plan,Logical Plan经过优化再转变为Physical Plan,之后Physical Plan中的各运算符再被封装到MapReduce的Map、Reduce中去执行。
Pig的设计者们将Pig Latin定位成一种通用的数据处理语言,因此在设计Pig Latin时尽可能的将其设计成为底层执行平台无关,即Logical Plan及其之上的处理过程与底层的运行平台(Hadoop)基本上是解耦合的。在实现Pig On Storm时,我们的思路是尽量保持Logical Plan之上的处理逻辑,通过对底层Physical Plan、Execute Engine约3万行核心代码的重构,将Pig改造为可在Storm之上运行,这个方案的思路可以用下边这张图来表示:
2.3 Pig On Storm编译Pig代码流程
1) IDE编辑书写Pig脚本:
用户在支持Pig语法高亮的IDE中,根据业务实际需求书写Pig脚本,每一个Pig语句独占一行。包含Foreach、Window、Partition、Filter、Tap、Stream等运算符,兼容Apache Pig语法。
2) Pig脚本生成AST(抽象语法树):
这个过程,主要是通过文法,语法解析,生成这个语法树。内容实质上没有什么变化,通过QUERY,STATEMENT两个关键字作为节点进行组织形成一个语法树。在实现上,通过开源引擎Antlr完成此步骤。主要包括语法识别,关键字识别,语句识别。
3) AST生成的Logical Plan(逻辑执行计划):
通过分析AST中的语句的输入、输出的关联关系。以RAW_DATA关系作为DATA_BAG关系的输入。描述具体Schema,包括Logical 操作的类名(LOTap),以及参数名称和参数数据类型。每个节点(RAW_DATA或DATA)描述一条pig语句,包含数据输入、输出关系,UDF函数名称,函数的输出参数,数据类型等信息。AST是纯文本描述
文档评论(0)