Pig系统分析(3) 从Pig Latin到Logical plan

Pig基于Antlr进行语法解析,生成逻辑执行计划。逻辑执行计划基本上与Pig Latin中的操作步骤一一对应,以DAG形式排列。

以下面代码(参考Pig Latin paper at SIGMOD 2008)为例进行分析,包含了load、filter、join、group、foreach、count函数和stroe等常用操作。

PigServer pigServer = new PigServer(ExecType.LOCAL);
pigServer.registerQuery("A = load 'file1' as (x,y,z);");
pigServer.registerQuery("B = load 'file2' as (t,u,v);");
pigServer.registerQuery("C = filter A by y>0;");
pigServer.registerQuery("D = join C by x,B by u;");
pigServer.registerQuery("E = group D by z;");
pigServer.registerQuery("F = foreach E generate group,COUNT(D);");
pigServer.explain("F", "dot", true, false, System.out, System.out,
                System.out);
pigServer.store("F", "output");

生成的逻辑执行计划如下

Parse过程

QueryLexer.g和QueryParser.g分别是Pig Latin使用的词法文件和语法文件。

Pig不仅仅使用 Anltr生成的词法分析器和语法分析器,校验用户输入合法性(AstValidator)。还同时做了两件事情(antlr具体细节不在此展开)

1)  在语法文件中嵌入动作,加入Java代码,对表达式做进一步处理。

2)  使用了Antlr 的抽象语法树语法,在语法分析的同时将用户输入转换成抽象语法树,如

foreach_plan_complex : LEFT_CURLY nested_blk RIGHT_CURLY-> ^( FOREACH_PLAN_COMPLEX nested_blk )

下图是JOIN语句语法规则的可视化表示

Parse时序图如下(省略了宏展开,用户REGISTER语句替换等细节,其中QueryLexer,QueryParser和AstValidator都是antlr生成的类):

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索文件
, 逻辑
, pig
, antlr
, 语法
, latin
, 生成
, antlr g文件
, pigserver,pig
抽象语法树
pig latin、pig latin python、pig latin算法、pig latin是什么、piglatin,以便于您获取更多的相关知识。

时间: 2024-09-17 04:35:33

Pig系统分析(3) 从Pig Latin到Logical plan的相关文章

Pig系统分析(5) 从Logical Plan到Physical Plan

Physical Plan生成过程 优化后的逻辑执行计划被LogToPhyTranslationVisitor处理,生成物理执行计划. 这是一个经典的Vistor设计模式应用场景. 其中,LogToPhyTranslationVisitor的visit()为入口方法,通过DependencyOrderWalker遍历处理逻辑执行计划中的每一个LogicalRelationalOperator.DependencyOrderWalker按照依赖顺序遍历DAG中节点,保证当且仅当节点的所有前驱都被访

Pig系统分析(1) 概述

本系列文章分析Pig运行主线流程,目的是借鉴Pig Latin on Hadoop,探索(类)Pig Latin on Spark的可能性. Pig概述 Apache Pig是Yahoo!为了让研究人员和工程师能够更简单处理.分析和挖掘大数据而发明的.从数据访问的角度来看,可以把YARN当成大数据的操作系统,那么Pig是各种不同类型的数据应用中不可或缺的一员. 尽管Pig的学习成本比Hive要高一些,但是Pig的优点是表达能力和灵活性更胜一筹.如果说用户使用声明式的Hive Hql表达的只是想要

Pig系统分析(8) Pig可扩展性

本文是Pig系统分析系列中的最后一篇了,主要讨论如何扩展Pig功能,不仅介绍Pig本身提供的UDFs扩展机制,还从架构上探讨Pig扩展可能性. 补充说明:前些天同事发现twitter推动的Pig On Spark项目:Spork,准备研究下. UDFs 通过UDFs(用户自定义函数),可以自定义数据处理方法,扩展Pig功能.实际上,UDFS除了使用之前需要register/define外,和内置函数没什么不同. 基本的EvalFunc 以内置的ABS函数为例: public class ABS

Pig系统分析(2) Loader/Store/Schema

Pig哲学之一--Pigs Eat Anything.Pig能够从不同数据源加载数据,能够处理不同格式的数据.Pig使用Loader/Store进行数据加载和存储,可选地使用Schema指定数据列名称和类型.如果加载数据时不指定Schema,数据列未命名,类型默认是字节数组(bytearray),在后续操作中,Pig可以通过位置参数引用数据列,会根据在数据列上进行的操作进行自动类型转化.从性能和可读性考虑,最好在加载数据时指定Schema. Loader体系 Loader的基类是org.apac

Pig系统分析(4) Logical Plan Optimizer

优化过程 Pig哲学之二--Pigs Are Domestic Animals.用户拥有足够的控制权.具体到逻辑执行计划的优化上,用户可以根据自己情况选择适合的优化规则(也可以理解为优化这块还大有潜力可挖). 逻辑执行计划在编译成物理执行计划之前,会被LogicalPlanOptimizer处理,和一系列优化规则进行匹配,匹配上的优化规则会对原有执行计划进行变换,最终产生优化后的新执行计划.整个过程如图所示: Pig的逻辑优化器通过简化.合并.插入和调整逻辑执行计划中LogicalRelatio

Pig系统分析(7) Pig实用工具类

Explain Explain是Pig提供的调试工具,使用explain可以输出Pig Lation的执行计划.值得一提的是,explain支持-dot选项,将执行计划以DOT格式输出, (DOT是一种图形描述语言,请参考http://zh.wikipedia.org/zh/DOT%E8%AF%AD%E8%A8%80) 代码实现详见org.apache.pig.impl.plan.DotPlanDumper,这部分实现为我们设计执行计划可视化提供了参考. 下图部分截取了使用Graphviz打开物

Pig系统分析(6) 从Physical Plan到MR Plan再到Hadoop Job

从Physical Plan到Map-Reduce Plan 注:因为我们重点关注的是Pig On Spark针对RDD的执行计划,所以Pig物理执行计划之后的后端参考意义不大,这些部分主要分析流程,忽略实现细节. 入口类MRCompiler,MRCompilier按照拓扑顺序遍历物理执行计划中的节点,将其转换为MROperator,每个MROperator都代表一个map-reduce job,整个完整的计划存储在MROperPlan类中.其中针对Load和Store操作会做以下特殊处理: S

面向Hadoop框架的高级语言:Apache Pig

Apache Pig是用来处理大规模数据的高级查询语言,配合 Hadoop使用,可以在处理海量数据时达到事半功倍的效果,比使用Java,C++等语言编写大规模数据处理程序的难度要小N倍,实现同样的效果的代码量也小N倍.Apache Pig为大数据集的处理提供了更高层次的抽象,为mapreduce算法(框架)实现了一套类SQL的数据处理脚本语言的shell脚本,在Pig中称之为Pig Latin,在这套脚本中我们可以对加载出来的数据进行排序.过滤.求和.分组(group by).关联(Joinin

Pig源码分析: 简析执行计划的生成

摘要 本文通过跟代码的方式,分析从输入一批Pig-latin到输出物理执行计划(与launcher引擎有关,一般是MR执行计划,也可以是Spark RDD的执行算子)的整体流程. 不会具体涉及AST如何解析.如何使用了Anltr.逻辑执行计划如何映射.逻辑执行计划如何优化.MR执行计划如何切分为MR Job,而是从输入一批Pig DSL到待执行的真正执行计划的关键变化步骤(方法和类). 执行计划完整解析 入口处书Main类的main函数 /** * The Main-Class for the