hive代码研究--设计模式(1)- 图(树)遍历


在hive的代码中核心是一个算子树,在算子树优化以及查询计划(MR序列)的生成过程中,多次使用算子树遍历设计模式,这里从总体上对这个设计模式进行介绍。

图遍历过程中包含两个模块的工作:分别是遍历器和调度器

1、遍历器(GraphWalker):对一颗算子树(或者任务树)进行遍历,遍历是扫描树中的每一个节点的过程,每次经过一个节点的时候,这里包含两个信息,当前节点以及当前状态(这个状态包括这个节点是否已经被调度过等),每次经过一个节点的时候需要根据当前状态以及相应的策略,决定是否对当前的节点进行调度(dispatch)

接口定义如下:

public interface GraphWalker {

  void startWalking(Collection<Node> startNodes,
      HashMap<Node, Object> nodeOutput) throws SemanticException;

}

2、调度器(Dispatcher):遍历器有一个调度器,每次遍历器决定对一个节点进行调度的时候,就会调用调度器运行,将节点信息,以及当前的节点状态栈(一般包含当前节点的父子节点等信息)传递给调度器,调度器进行处理。调度器的作用通常是根据当前节点以及栈信息,来判断是否符合某些特定的规则,如果满足,则进行对应的处理。这些处理并不会修改原始的算子树,而是在相关联的上下文(NodeProcessorC
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值