首先咱们要知道hive究竟是作什么的。下面这几段文字很好的描述了hive的特性: html
1.hive是基于Hadoop的一个数据仓库工具,能够将结构化的数据文件映射为一张数据库表,并提供完整的sql查询功能,能够将sql语句转换为MapReduce任务进行运行。其优势是学习成本低,能够经过类SQL语句快速实现简单的MapReduce统计,没必要开发专门的MapReduce应用,十分适合数据仓库的统计分析。 mysql
2.Hive是创建在 Hadoop 上的数据仓库基础构架。它提供了一系列的工具,能够用来进行数据提取转化加载(ETL),这是一种能够存储、查询和分析存储在 Hadoop 中的大规模数据的机制。Hive 定义了简单的类 SQL 查询语言,称为 HQL,它容许熟悉 SQL 的用户查询数据。同时,这个语言也容许熟悉 MapReduce 开发者的开发自定义的 mapper 和 reducer 来处理内建的 mapper 和 reducer 没法完成的复杂的分析工做。 web
hive和关系数据库不一样: sql
HQL 中对查询语句的解释、优化、生成查询计划是由 Hive 完成 全部的数据都是存储在 Hadoop 中 查询计划被转化为 MapReduce 任务,在 Hadoop 中执行(有些查询没有 MR 任务,如:select * from table) Hadoop和Hive都是用UTF-8编码的 数据库
由上图可知,hadoop和mapreduce是hive架构的根基。Hive架构包括以下组件: 编程
CLI(command line interface)、 安全
JDBC/ODBC、Thrift Server、WEB GUI、 服务器
metastore和Driver(Complier、Optimizer和Executor), 架构
这些组件我能够分为两大类:服务端组件和客户端组件。 app
首先讲讲服务端组件:
Driver组件:
该组件包括Complier、Optimizer和Executor,它的做用是将咱们写的HiveQL(类SQL)语句进行解析、编译优化,生成执行计划,而后调用底层的mapreduce计算框架。
Metastore组件:
元数据服务组件,这个组件存储hive的元数据,hive的元数据存储在关系数据库里,hive支持的关系数据库有derby、mysql。元数据对于hive十分重要,所以hive支持把metastore服务独立出来,安装到远程的服务器集群里,从而解耦hive服务和metastore服务,保证hive运行的健壮性,这个方面的知识,我会在后面的metastore小节里作详细的讲解。
Thrift服务:
thrift是facebook开发的一个软件框架,它用来进行可扩展且跨语言的服务的开发,hive集成了该服务,能让不一样的编程语言调用hive的接口。
CLI:
command line interface,命令行接口。
Thrift客户端:
上面的架构图里没有写上Thrift客户端,可是hive架构的许多客户端接口是创建在thrift客户端之上,包括JDBC和ODBC接口。
WEBGUI:
hive客户端提供了一种经过网页的方式访问hive所提供的服务。这个接口对应hive的hwi组件(hive web interface),使用前要启动hwi服务。
下面我着重讲讲metastore组件,具体以下:
Hive的metastore组件是hive元数据集中存放地。Metastore组件包括两个部分:metastore服务和后台数据的存储。后台数据存储的介质就是关系数据库,例如hive默认的嵌入式磁盘数据库derby,还有mysql数据库。Metastore服务是创建在后台数据存储介质之上,而且能够和hive服务进行交互的服务组件,默认状况下,metastore服务和hive服务是安装在一块儿的,运行在同一个进程当中。我也能够把metastore服务从hive服务里剥离出来,metastore独立安装在一个集群里,hive远程调用metastore服务,这样咱们能够把元数据这一层放到防火墙以后,客户端访问hive服务,就能够链接到元数据这一层,从而提供了更好的管理性和安全保障。使用远程的metastore服务,可让metastore服务和hive服务运行在不一样的进程里,这样也保证了hive的稳定性,提高了hive服务的效率。
hive流程
上面的图能够详细介绍相关的流程图 。