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

Physical Plan生成过程

优化后的逻辑执行计划被LogToPhyTranslationVisitor处理,生成物理执行计划。

这是一个经典的Vistor设计模式应用场景。

其中,LogToPhyTranslationVisitor的visit()为入口方法,通过DependencyOrderWalker遍历处理逻辑执行计划中的每一个LogicalRelationalOperator。DependencyOrderWalker按照依赖顺序遍历DAG中节点,保证当且仅当节点的所有前驱都被访问后,它才会被访问。核心逻辑如下,doAllPredecessors递归调用自己,将符合无前驱条件的节点添加到fifo队列中,最终实现的效果等效于将图拓扑排序后顺序访问。

public void walk(PlanVisitorvisitor) throws FrontendException {
        List<Operator> fifo = new ArrayList<Operator>();
        Set<Operator> seen = new HashSet<Operator>();
        List<Operator> leaves = plan.getSinks();
        if (leaves == null) return;
        for (Operator op : leaves) {
            doAllPredecessors(op, seen, fifo);
        }
        for (Operator op: fifo) {
            op.accept(visitor);
        }
}

接下来,每个LogicalRelationalOperator又反过来调用LogToPhyTranslationVisitor相应的visit方法对自身进行处理,转化成PhysicalOperator。最终生成完整的逻辑执行计划。下图是LogToPhyTranslationVisitor中所有的visit operator方法。

Physical Plan结构

分析之前Pig系统分析(3)中代码生成的执行计划,如图所示:

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索方法
, 逻辑
, 节点
, 处理
生成
pigcms微店系统、plan系统维护盘 iso、plan系统维护盘、mac系统treeplan安装、plan 9 操作系统,以便于您获取更多的相关知识。

时间: 2025-01-21 07:48:59

Pig系统分析(5) 从Logical Plan到Physical Plan的相关文章

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

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

SQL Server中narrow plan和wide plan究竟是怎么回事呢?

早些时间team里面的Simon同学碰到一个很有意思的有关UPDATE 语句性能的案例.他的客户跟他说,在SQL server 系统上,客户发现UPDATE的语句性能不够稳定.在SQL profiler trace 里面客户发现UPDATE语句大部分时间执行的都很快,但有时执行的比较慢,不知道是怎么回事呢. &http://www.aliyun.com/zixun/aggregation/37954.html">nbsp; 检查语句性能少不了查看语句的执行计划.客户在他的profi

Pig系统分析(4) Logical Plan Optimizer

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

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 = lo

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系统分析(2) Loader/Store/Schema

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

Spark-SparkSQL深入学习系列一(转自OopsOutOfMemory)

 /** Spark SQL源码分析系列文章*/     自从去年Spark Submit 2013 Michael Armbrust分享了他的Catalyst,到至今1年多了,Spark SQL的贡献者从几人到了几十人,而且发展速度异常迅猛,究其原因,个人认为有以下2点:     1.整合:将SQL类型的查询语言整合到 Spark 的核心RDD概念里.这样可以应用于多种任务,流处理,批处理,包括机器学习里都可以引入Sql.    2.效率:因为Shark受到hive的编程模型限制,无法再继续优