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)循环执行解析执行各种命令;
hive源代码解析之一hive主函数入口的更多相关文章
- 大话java基础知识一之为什么java的主函数入口必须是public static void
为什么java的主函数入口必须是public static void main (String[] args); 很多写javaEE好几年的程序员经常会记得java的主函数就是这么写的,但实际上为什么 ...
- Hive学习之自己定义聚合函数
Hive支持用户自己定义聚合函数(UDAF),这样的类型的函数提供了更加强大的数据处理功能. Hive支持两种类型的UDAF:简单型和通用型.正如名称所暗示的,简单型UDAF的实现很easy,但因为使 ...
- Hive(六)内置函数与高级操作
一内置函数 1 数学函数 Return Type Name (Signature) Description DOUBLE round(DOUBLE a) Returns the rounded BIG ...
- Hive(四)hive函数与hive shell
一.hive函数 1.hive内置函数 (1)内容较多,见< Hive 官方文档> https://cwiki.apache.org/confluence/displ ...
- Hadoop Hive概念学习系列之hive里的用户定义函数UDF(十七)
Hive可以通过实现用户定义函数(User-Defined Functions,UDF)进行扩展(事实上,大多数Hive功能都是通过扩展UDF实现的).想要开发UDF程序,需要继承org.apache ...
- Hive部分函数解析
Hive部分函数解析 Hive里的exists ,in ,not exists ,not in 相关函数 表数据准备: 1.选择指定数据库 eg: use bg_database1; 2. 创建表 ...
- 如何在 Apache Hive 中解析 Json 数组
我们都知道,Hive 内部提供了大量的内置函数用于处理各种类型的需求,参见官方文档:Hive Operators and User-Defined Functions (UDFs).我们从这些内置的 ...
- 【原创】大数据基础之Hive(2)Hive SQL执行过程之SQL解析过程
Hive SQL解析过程 SQL->AST(Abstract Syntax Tree)->Task(MapRedTask,FetchTask)->QueryPlan(Task集合)- ...
- [Hive]HiveSQL解析原理
Hive是基于Hadoop的一个数据仓库系统,在各大公司都有广泛的应用.美团数据仓库也是基于Hive搭建,每天执行近万次的Hive ETL计算流程,负责每天数百GB的数据存储和分析.Hive的稳定性和 ...
随机推荐
- lcx源代码以及免杀的研究
之前和Random大神讨论了一下免杀的问题,他给出了一个比较不错的想法,使用debug版本发布可以过很多杀软.顺便看了下lcx的源码,发现其代码不算特别复杂,于是乎就在这分析一下. 报毒情况 因为使用 ...
- mysql加入�管理员
1.首先用超级管理员登录,然后点击权限button 2.点击加入�新用户,填写登录名和password,全局权限不用选,点击新建用户button 3.编辑新加入�的用户(编辑权限) 4.找到" ...
- 【JavaScript设计模式系列---开篇预览】
转:http://www.cnblogs.com/Darren_code/archive/2011/08/31/JavascripDesignPatterns.html 2011-08-31 23:5 ...
- Ebean Demo
ebean orm框架,其作者觉得hibernate的bean管理会话管理.难以在短时间明确,就自己搞了一套,就成了如今的ebean. ebean被一些开发人员这觉得是一把瑞士军刀.能够看出一些程序 ...
- Linux 安装 Python3.5
1. 准备 操作系统:Red Hat Enterprise Linux Server release 6.5 (Santiago) Python 安装包:Python-3.5.2.tgz 下载地址:h ...
- chrome跨域配置
"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --disable-web-security --use ...
- ASP.NET得到系统相关信息
1. 在ASP.NET中专用属性: 获取服务器电脑名:Page.Server.ManchineName 获取用户信息:Page.User 获取客户端电脑名:Page.Request.UserHos ...
- .NET3.5中的高性能 Socket API
转载:http://www.cnblogs.com/TianFang/archive/2007/11/09/954730.html 在 .NET Framework 2.0 版本中,System.Ne ...
- Android MVP模式的初识
MVP是什么?或许在之前更多的人知道的是MVC这个模式(Model View Controller),然而MVP与MVC最不同的一点是M与V是不直接 关联的也是就Model与View不存在直接关系 ...
- SET NOCOUNT 的意义.
SET NOCOUNT 使返回的结果中不包含有关受 Transact-SQL 语句影响的行数的信息. 语法 SET NOCOUNT { ON | OFF } 当 SET NOCOUNT 为 ON 时, ...