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 操作系统,以便于您获取更多的相关知识。