zoukankan      html  css  js  c++  java
  • hive源代码解析之一hive主函数入口

    hive其实做的就是解析一条sql然后形成到mapreduce任务,就是一个代码解释器。hive源代码本身就可以分为ql/metasotre/service/serde 这几块;其中

      对于Hive来说,ql是整个Hive最最核心的一个模块,Hive主要的功能都集中在这样一个模块中,即org.apache.hadoop.hive.ql.*,其中最重要的几个模块:

    • parse:语法解析器和语义分析器,将SQL转化为执行计划。
    • optimizer:优化器,包括执行计划Operator图的改写(逻辑优化)和Task图的改写(物理优化)
    • exec:执行器,作业提交和执行相关。
    • udf:Hive内置的用户自定义函数,包括操作符加、减、乘、除、与、或、非,常用数学操作(sin、cos等)、字符串操作(substr、instr)、聚合操作(count、sum、avg等)等。

          无论使用CLI、Thrift Server、JDBC还是自定义的提交工具,最终的HQL都会传给Driver实例,执行Driver.run()方法。从这种设计也可以看出,如果您要开发一套自定义的Hive作业提交工具,最好的方式是引用Driver实例,调用相关方法进行开发。
          而Driver.run()方法,获得了这样一个HQL,则会执行两个重要的步骤:编译和执行,即Driver.complie()和Driver.execute()。对于Driver.comile()来说,其实就是调用parse和optimizer包中的相关模块,执行语法解析、语义分析、优化(回想一下大学时的编译原理,编译的过程是不是语法分析、语法解析、语义分析);对于Driver.run()来说,其实就是调用exec包中的相关模块,将解析后的执行计划执行,如果解析后的结果是一个查询计划,那么通常的作法就是提交一系列的MapReduce作业。

    以查询的执行为例,整个Hive的流程是非常简单的一条直线,由上到下进行。

    对于main函数,其中主要做了三件事情:

    (1)初始化各种配置和参数;

    (2)循环执行解析执行各种命令;

  • 相关阅读:
    cdn服务器
    面向对象---特----性
    我自己总结的一些知识点--分享
    进程与线程的区别
    centos忘记root用户的密码
    svn上传时显示database is locked
    公司memcache安装方式及启动方式
    阿里云挂载快照盘
    阿里云卸载磁盘是报错
    scp
  • 原文地址:https://www.cnblogs.com/laodageblog/p/3679230.html
Copyright © 2011-2022 走看看