Pig系统分析(4) Logical Plan Optimizer

优化过程

Pig哲学之二——Pigs Are Domestic Animals。用户拥有足够的控制权。具体到逻辑执行计划的优化上,用户可以根据自己情况选择适合的优化规则(也可以理解为优化这块还大有潜力可挖)。

逻辑执行计划在编译成物理执行计划之前,会被LogicalPlanOptimizer处理,和一系列优化规则进行匹配,匹配上的优化规则会对原有执行计划进行变换,最终产生优化后的新执行计划。整个过程如图所示:

Pig的逻辑优化器通过简化、合并、插入和调整逻辑执行计划中LogicalRelationalOperator的顺序等变换操作达到优化目的。下文逐个介绍每个优化规则。

基于规则的优化器

PartitionFilterOptimizer

将分区过滤条件下推到Loader(需要Loader支持,比如HCatLoader支持分区字段推送,请参考之前介绍的LoadMetadata接口)

FilterLogicExpressionSimplifier

简化filter语句中的逻辑条件表达式,其中规则较多,委托给LogicalExpressionProxy进行处理:常量计算,根据摩根定律变换and/or操作和使用DNF标准化逻辑公式等。

SplitFilter

将filter语句中的条件分割,以便让他们分别下推。比如:

A = LOAD 'input1' as (a0, a1);
B = LOAD 'input2' as (b0, b1);
C = JOIN A by a0, B by b0;
D = FILTER C BY a1>0 and b1>0;

D中对a和b的过滤条件可以分割开,以便于这两个过滤条件能够分别被下推。

X = FILTER C BY a1>0;
D = FILTER X BY b1>0;

PushUpFilter

将过滤条件下推(沿着数据流DAG图上推),减少数据传输量

FilterAboveForeach

从foreach语句中移除与之前操作重复的过滤条件

ImplicitSplitInserter

插入split语句,(原因详见下文“其他优化”中split部分)

MergeFilter

在PushUpFilter之后,合并过滤条件,减少filter语句

PushDownForEachFlatten

将foreach中的flatten往后放(沿着数据流DAG图下推),能够减少后续join等操作的数据量。因为如果flatten对bag操作,一条记录会生成多条记录,降低后续join操作的性能,优化后,会将flatten操作放在join操作之后。

LimitOptimizer

Limit语句下推,尽早减少数据传输量。

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

时间: 2024-10-03 13:41:51

Pig系统分析(4) Logical Plan Optimizer的相关文章

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系统分析(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系统分析(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系统分析(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的编程模型限制,无法再继续优

Hadoop- The Definitive Guide 笔记二

The Apache Hadoop project develops open-source software for reliable, scalable, distributed computing, including:Hadoop Core , our flagship sub-project, provides a distributed filesystem (HDFS) and support for the MapReduce distributed computing meta