hive是基于Hadoop的一个数据仓库工具,用来进行数据提取、转化、加载,这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制。hive数据仓库工具能将结构化的数据文件映射为一张数据库表,并提供SQL查询功能,能将SQL语句转变成MapReduce任务来执行。
在Hadoop项目的众多大数据组件中,HDFS解决了文件分布式存储问题,MapReduce解决了文件处理分布式计算问题,HBASE解决了分布式文件的存储与检索问题,注意HBASE的存储与HDFS的存储有所不同,简单来说就是HBASE是基于HDFS之上的,用户通过HABSE的命令行即可将数据存储到HDFS文件系统上,而不用详细了解HDFS的存储原理。
HBASE适合做单行数据或实时性数据的检索,但是对于数据的统计或者计算却无能无力,譬如,用户想统计几十亿行数据中出现了多少个HelloWorld,这时需要用户手写一堆MapReduce程序,这对熟悉SQL的程序员来说,非常不方便,如果能用SQL的方式查询分布式文件将大大减少程序人员的学习成本。
于是,Hive应运而生。
Driver组件:该组件包括Complier、Optimizer和Executor,它的作用是将HiveQL(类SQL)语句进行解析、编译优化,生成执行计划,然后调用底层的MapReduce计算框架。
Metastore组件:元数据服务组件,这个组件存取Hive的元数据,Hive的元数据存储在关系数据库里,Hive支持的关系数据库有Derby和Mysql。作用是:客户端连接metastore服务,metastore再去连接MySQL数据库来存取元数据。
Thrift服务:Thrift是Facebook开发的一个软件框架,它用来进行可扩展且跨语言的服务的开发,Hive集成了该服务,能让不同的编程语言调用Hive的接口。
CLI:命令行界面。用户可以使用该接口创建表、查询表等操作。
JDBC/ODBC:Hive架构的JDBC和ODBC接口是建立在Thrift客户端之上,使用该接口实现程序语言对hive的调用。
WEBGUI:Hive客户端提供了一种通过网页的方式访问Hive所提供的服务。这个接口对应Hive的HWI组件(Hive Web Interface),使用前要启动HWI服务。
1.Execute Query:用户将HQL语句发送到driver来执行。
2.Get Plan:Driver根据查询编译器解析query语句,验证query语句的语法,查询计划或者查询条件。
3.Get Metadata:编译器将元数据请求发送给Metastore(数据库)。
4.Send Metadata:Metastore将元数据作为响应发送给编译器。
5.Send Plan:编译器检查要求和重新发送Driver的计划。到这里,查询的解析和编译完成。
6.Execute Plan:Driver将执行计划发送到执行引擎。
6.1)Execute Job:hadoop内部执行的是mapreduce工作过程,任务执行引擎发送一个任务到资源管理节点(resourcemanager),资源管理器分配该任务到任务节点,由任务节点上开始执行mapreduce任务。
6.2)Metadata Ops:在执行引擎发送任务的同时,对hive的元数据进行相应操作。
7.Fetch Result:执行引擎接收数据节点(data node)的结果。
8.Send Results:执行引擎发送这些合成值到Driver。
9.Send Results:Driver将结果发送到hive接口。
本文参考:https://www.jianshu.com/p/afe2248aa86e