hive源代码解析之一hive主函数入口

系统 3311 0

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的流程是非常简单的一条直线,由上到下进行。

hive源代码解析之一hive主函数入口

 

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

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

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

 

 

 

hive源代码解析之一hive主函数入口


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论