Hive 介绍
Hive是什么?
Hive是一个数据仓库基础工具在Hadoop中用来处理结构化数据。它架构在Hadoop之上,总归为大数据,并使得查询和分析方便。并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。
Hive是一个数据仓库,那么Hive和传统意义上的数据库有什么不一样的呢?
1.hive和关系数据库存储文件的系统不同,hive使用的是hadoop的HDFS(hadoop的分布式文件系统),关系数据库则是服务器本地的文件系统.
2.hive使用的计算模型是mapreduce,而关系数据库则是自己设计的计算模型.
3.关系数据库都是为实时查询的业务进行设计的,而hive则是基于hadoop的,是为海量数据做数据挖掘设计的,实时性很差;实时性的区别导致hive的应用场景和关系数据库有很大的不同。
4.Hive很容易扩展自己的存储能力和计算能力,这个是继承hadoop的,而关系数据库在这个方面要比数据库差很多。
也就是说,hive具有以下特点:
1.它存储架构在一个数据库中并处理数据到HDFS。
2.它是专为OLAP(online analytical procession )设计,他不是OLTP(online trancational procession)的。
3.它提供SQL类型语言查询叫HiveQL或HQL。
4.它是熟知,快速,可扩展和可扩展的。
hive的组件:
我们首先来看这张图:
可以看得出来,hive是基于hadoop之上的一个组件。
hive由CLI(command line interface)、JDBC/ODBC、Thrift Server、WEB GUI、metastore和Driver(Complier、Optimizer和Executor)组成。大体可以分成服务端组件和客户端组件。
客户端组件:
1.CLI:command line interface,命令行接口。一般用的最多最熟悉的客户端组件,可以直接使用。安装好hive之后,只需要hive命令就可以进入CLI。
2.Thrift客户端:上面的架构图里没有写上Thrift客户端,但是hive架构的许多客户端接口是建立在thrift客户端之上,包括JDBC和ODBC接口。提供了代码连接的方式连接hive数据库。
3.WEBGUI:hive客户端提供了一种通过网页的方式访问hive所提供的服务。这个接口对应hive的hwi组件(hive web interface),使用前要启动hwi服务。WebUI只能用来进行查询操作,局限性较大。
服务端组件:
1.Driver组件:该组件包括Complier、Optimizer和Executor,也就是编译器,优化器和执行器。编译器编译得到执行计划,优化器优化执行计划得到更好的执行计划。它的作用是将我们写的HiveQL(类SQL)语句进行解析、编译优化,生成执行计划,然后调用底层的mapreduce计算框架。
2.Metastore组件:元数据服务组件,这个组件存储hive的元数据,hive的元数据存储在关系数据库里,hive支持的关系数据库有derby、mysql。
3.Thrift服务:thrift是facebook开发的一个软件框架,它用来进行可扩展且跨语言的服务的开发,hive集成了该服务,能让不同的编程语言调用hive的接口。
Hive执行HQL过程是怎么样的呢?
首先我们在客户端编写HQL语句,然后执行,对应于图中1步骤。
Driver组件接收到HQL语句之后,调用编译器获取执行计划,对应图中步骤2。
编译器在编译生成执行计划的过程中,向metastore获取元数据,才能完成执行计划的生成,对应图中步骤3,4,。生成执行计划之后,将执行计划返回给driver组件,对应步骤5.
这里应该还有driver组件将执行计划交给优化器optimizer优化执行计划的步骤。
driver组件获取了优化之后的执行计划之后,交给执行引擎执行这个执行计划。对应步骤6。
执行引擎执行执行计划,首先去metastore中获取元数据,将执行计划按照map,reduce的方式交给hadoop去执行mapReduce任务,最后获取结果,发送给客户端。