大数据平台之Hive(复习用)

1.Hive与传统数据库的区别?

Hive在很多方面和传统数据库类似,但是,它的底层依赖的是HDFS和MapReduce(或Tez、Spark),所以,在很多方面又有别于传统数据库。表9-1从数据存储、索引、分区、执行引擎、执行延迟、扩展性、数据规模等方面,对Hive和传统数据库进行了对比分析。

大数据平台之Hive(复习用)_第1张图片

表9-1 Hive与传统数据库的对比


在数据存储方面,传统数据库一般依赖于本地文件系统,Hive 则依赖于分布式文件系统HDFS。在索引方面,传统数据库可以针对多个列构建复杂的索引,大幅度提升数据查询性能,而Hive没有传统数据库中键的概念,它只能提供有限的索引功能,使用户可以在某些列上创建索引,从而加速一些查询操作。Hive中给一个表创建的索引数据,会被保存在另外的表中。在分区方面,传统的数据库提供分区功能来改善大型表和具有各种访问模式的表的可伸缩性、可管理性,以及提高数据库效率;Hive也支持分区功能,Hive表是以分区的形式进行组织的,根据“分区列”的值对表进行粗略的划分,从而加快数据的查询速度。在执行引擎方面,传统数据库依赖自身的执行引擎,Hive则依赖于MapReduce、Tez和Spark等执行引擎。在执行延迟方面,传统数据库中的SQL语句的延迟一般少于1秒,而HiveQL语句的延迟会达到分钟级。因为Hive构建在HDFS与 MapReduce 之上,所以,相对传统数据库,Hive 的延迟会比较高。在扩展性方面,传统数据库很难实现横向扩展,纵向扩展的空间也很有限;相反,Hive 的开发和运行环境是基于 Hadoop集群的,所以具有较好的横向可扩展性。在数据规模方面,传统数据库一般只能存储有限规模的数据,Hive则可以支持大规模的数据存储。

 

 

2.Hive的访问方式?

用户接口模块包括CLI、Hive网页接口(Hive Web Interface,HWI)、JDBC、ODBC、Thrift Server等,用来实现外部应用对Hive的访问。CLI是Hive自带的一个命令行客户端工具,但是,这里需要注意的是,Hive还提供了另外一个命令行客户端工具Beeline,在Hive 3.0以上版本中,Beeline取代了CLI。HWI是Hive的一个简单网页,JDBC、ODBC和Thrift Server可以向用户提供进行编程访问的接口。其中,Thrift Server基于Thrift软件框架开发,它提供Hive的RPC通信接口。

 

 

3.Hive的主要组成模块?

Hive主要由以下3个模块组成:用户接口模块、驱动模块以及元数据存储模块。用户接口模块包括CLI、Hive网页接口(Hive Web Interface,HWI)、JDBC、ODBC、Thrift Server等,用来实现外部应用对Hive的访问。CLI是Hive自带的一个命令行客户端工具,但是,这里需要注意的是,Hive还提供了另外一个命令行客户端工具Beeline,在Hive 3.0以上版本中,Beeline取代了CLI。HWI是Hive的一个简单网页,JDBC、ODBC和Thrift Server可以向用户提供进行编程访问的接口。其中,Thrift Server基于Thrift软件框架开发,它提供Hive的RPC通信接口。驱动模块(Driver)包括编译器、优化器、执行器等,所采用的执行引擎可以是MapReduce、Tez或Spark等。当采用MapReduce作为执行引擎时,驱动模块负责把HiveQL语句转换成一系列MapReduce作业(9.3节介绍转换过程的基本原理),所有命令和查询都会进入驱动模块,通过该模块对输入进行解析编译,对计算过程进行优化,然后按照指定的步骤执行。元数据存储模块(Metastore)是一个独立的关系数据库,通常是与 MySQL 数据库连接后创建的一个MySQL实例,也可以是Hive自带的derby数据库实例。元数据存储模块中主要保存表模式和其他系统元数据,如表的名称、表的列及其属性、表的分区及其属性、表的属性、表中数据所在位置信息等。

大数据平台之Hive(复习用)_第2张图片

 

 

 

4.向Hive输入一条查询的具体执行过程?

当用户向Hive输入一段命令或查询(即HiveQL语句)时,Hive需要与Hadoop交互工作来完成该操作。该命令或查询首先进入驱动模块,由驱动模块中的编译器进行解析编译,并由优化器对该操作进行优化计算,然后交给执行器去执行。执行器通常的任务是启动一个或多个 MapReduce作业,有时也不需要启动MapReduce作业,比如执行包含*的操作时(如select * from表),就是全表扫描,选择所有的属性和所有的元组,不存在投影和选择操作,因此,不需要执行 Map和Reduce操作。图9-8描述了用户提交一段 SQL 查询后,Hive把SQL语句转换成MapReduce作业进行执行的详细过程。

如图9-8所示,在 Hive 中,用户通过命令行CLI或其他Hive访问工具,向Hive输入一段命令或查询以后,SQL 查询被 Hive 自动转换成MapReduce作业,具体步骤如下。

大数据平台之Hive(复习用)_第3张图片

 (1)由Hive驱动模块中的编译器—Antlr语言识别工具,对用户输入的SQL进行词法和语法解析,将SQL语句转化为抽象语法树(Abstract Syntax Tree,AST)的形式。

(2)对该抽象语法树进行遍历,进一步转化成查询块(QueryBlock)。因为抽象语法树的结构仍很复杂,不方便直接翻译为MapReduce算法程序,所以,Hive 把抽象语法树进一步转化为查询块。查询块是一个最基本的 SQL 语法组成单元,包括输入源、计算过程和输出3个部分。

(3)再对查询块进行遍历,生成操作树(OperatorTree)。其中,操作树由很多逻辑操作符组成,如 TableScanOperator、SelectOperator、FilterOperator、JoinOperator、GroupByOperator 和ReduceSinkOperator等。这些逻辑操作符可以在Map阶段和Reduce阶段完成某一特定操作。

(4)通过Hive驱动模块中的逻辑优化器对操作树进行优化,变换操作树的形式,合并多余的操作符,从而减少MapReduce作业数量以及Shuffle阶段的数据量。

(5)对优化后的操作树进行遍历,根据操作树中的逻辑操作符生成需要执行的 MapReduce作业;

(6)启动Hive驱动模块中的物理优化器,对生成的MapReduce作业进行优化,生成最终的MapReduce作业执行计划。

(7)最后由Hive驱动模块中的执行器,对最终的MapReduce作业进行执行输出。

 

 

 

5.Hive HA的原理?

Hive的功能十分强大,可以支持采用SQL方式查询Hadoop平台上的数据。但是,在实际应用中,Hive也暴露出不稳定的问题,在极少数情况下,甚至会出现端口不响应或者进程丢失的问题。Hive HA的出现,就是为了解决这类问题。

Hive HA基本原理如图9-9所示。在Hive HA中,在Hadoop集群上构建的数据仓库是由多个Hive实例进行管理的,这些Hive实例被纳入一个资源池中,并由HAProxy提供一个统一的对外接口。客户端的查询请求首先访问HAProxy,由HAProxy对访问请求进行转发。HAProxy收到请求后,会轮询资源池里可用的Hive实例,执行逻辑可用性测试。如果某个Hive实例逻辑可用,就会把客户端的访问请求转发到该Hive实例上,如果该Hive实例逻辑不可用,就把它放入黑名单,并继续从资源池中取出下一个Hive实例进行逻辑可用性测试。对于黑名单中的Hive实例, HiveHA会每隔一段时间进行统一处理,首先尝试重启该Hive实例,如果重启成功,就再次把它放入资源池中。由于采用HAProxy提供统一的对外访问接口,因此,对于程序开发人员来说,可以把它当作一台超强“Hive”。

大数据平台之Hive(复习用)_第4张图片

 

你可能感兴趣的:(数据仓库,hadoop,hive)