hive源码(八)源码总结

hive源码 观后总结

整体流程
    1.进入程序,利用Antlr框架定义的预发规则,对HQL完成语法解析,将HQL转换为AST(抽象语法树)
    2.遍历AST,抽象出查询的基本构成单元QueryBlock(查询块),可以理解为最小查询执行单元
    3.遍历QueryBlock,将它转换为OperatorTree(操作树),可以理解成不可拆分的逻辑执行单元
    4.逻辑优化器对OperatorTree进行逻辑优化。
    5.OperatorTree转换为TaskTree,就是翻译成MR任务的流程,将逻辑执行计划转换为物理执行计划
    6.物理优化器对TaskTree进行物理优化
    7.生成最终的执行计划,提交到集群运行
重要类详解
    CliDriver:
        1.参数设置,日志标准化,-S -e -f -i -database 等参数
        2.每一行 按照;切分 处理   shell处理     处理exit  ctrl+C   计算时长、打印结果
    Driver:
        1.hook Driver run之前的hook、语法分析之前hook、执行计划前hook、task执行前 后 失败hook
        2.sql 通过antlr转成AST(抽象语法树)
            FromClauseParser.g:from后面的sql的匹配规则   SelectClauseParser.g:select后面的sql的匹配规则
            IdentifiersParser.g:函数的解析   HiveParser.g:语法解析的
            上面基本上就是一些关键字,下面主要是函数都是一个关键字组成的语法:一个init和after函数  
            init其实大部分是打印日志的    after主要枚举了可以执行的语法
            AST TOK_***   树状结构不简洁:SELECT->TOK_TABLE_OR_COL->真正名称
        3.物理执行计划执行:两个队列一个running 一个runnable
            两种执行方式:1.一个程序执行:hive-exec-3.1.3.jar org.apache.hadoop.hive.ql.exec.mr.ExecDriver 
            2.yarn 提交job
    SemanticAnalyzer:
        1.替换数字
        2.AST转换为QB(查询块)  JOIN以后的对象还是AST存储qbp,join以前的aliasToSubq aliases 里面存储
        3.QB转OperatorTree(操作树 逻辑执行树)  TS SEL GBY RS FIL FS  逻辑执行的优化
            Rule定义:R1(TS) R2[RS] R3[FIL] .startwork 如果符合上面定义的规则,才对树进行操作
            or换成in  where(struct用法拆出来分区字段)  条件传播(where传播)  表达式算成常量
            where下推  列裁剪(从最后的节点往前推)  分区裁剪(没有对树进行操作节点的属性拉出来)
            分区移除(分区相关的节点移除)  节点删除(连续SEL节点去除,没有列裁剪的SEL去除)
            LIMIT下推(RS 后面会跟一个limit属性)  元数据统计  取样(FS转换成LIST_SINK)
        4.逻辑执行计划转换为物理执行计划  GBY节点和JOIN节点都会被转换成一个mapreduce
            hive根目录+随机数  就是中间数据存储路径  path和类型 类型下推  物理执行计划就完成了

        5.物理执行计划优化:mapjoin可能的优化  本地计算(单机计算)  执行结果为空limit 0
            Vectorizer hive函数注册  CrossProductHandler(mr/tez MapJoin/Shuffle 交叉乘积)
            rootTask对象有一个work对象(mapwork reducework childrenWork path路径)
源码解析相关博客
    源码分析相关的博客:
    https://blog.csdn.net/wzq6578702/category_6019045.html?spm=1001.2014.3001.5482
    https://blog.csdn.net/zyzzxycj/article/details/102861166
    逻辑优化器源码分析博客:
    https://cloud.tencent.com/developer/column/95255
posted @ 2022-08-11 16:03  Kotlin  阅读(255)  评论(0编辑  收藏  举报
Live2D