Hive基本原理

Hive结构

Hive结构

Hive为单实例的服务进程,提供服务的原理是将HQL编译解析成相应的MapReduce或者HDFS任务。

  • 各模块的功能说明如下:
  • HiveServer

    一个集群内可部署多个HiveServer,负荷分担。对外提供Hive数据库服务,将用户提交的HQL语句进行编译,解析成对应的Yarn任务或者HDFS操作,从而完成数据的提取、转换、分析。

    MetaStore

    一个集群内可部署多个MetaStore,负荷分担。提供Hive的元数据服务,负责Hive表的结构和属性信息读、写、维护和修改。

    提供Thrift接口,供HiveServer、Spark、WebHCat等MetaStore客户端来访问,操作元数据。

    WebHCat

    一个集群内可部署多个WebHCat,负荷分担。提供Rest接口,通过Rest执行Hive命令,提交MapReduce任务。

    Hive客户端

    包括人机交互命令行Beeline、提供给JDBC应用的JDBC驱动、提供给Python应用的Python驱动、提供给Mapreduce的HCatalog相关JAR包。

    ZooKeeper集群

    ZooKeeper作为临时节点记录各HiveServer实例的IP地址列表,客户端驱动连接Zookeeper获取该列表,并根据路由机制选取对应的HiveServer实例。

    HDFS/HBase集群

    Hive表数据存储在HDFS集群中。

    MapReduce/Yarn集群

    提供分布式计算服务:Hive的大部分数据操作依赖MapReduce,HiveServer的主要功能是将HQL语句转换成MapReduce任务,从而完成对海量数据的处理。

Hive原理

Hive原理

Hive作为一个基于HDFS和MapReduce架构的数据仓库,其主要能力是通过对HQL(Hive Query Language)编译和解析,生成并执行相应的MapReduce任务或者HDFS操作。

  • 各模块的功能说明如下:
  • Metastore

    对表,列和Partition等的元数据进行读写及更新操作,其下层为关系型数据库。

    Driver

    管理HiveQL执行的生命周期并贯穿Hive任务整个执行期间。

    Compiler

    编译HiveQL并将其转化为一系列相互依赖的Map/Reduce任务。

    Optimizer

    优化器,分为逻辑优化器和物理优化器,分别对HiveQL生成的执行计划和MapReduce任务进行优化。

    Executor

    按照任务的依赖关系分别执行MapReduce任务。

    ThriftServer

    提供thrift接口,作为JDBC和ODBC的服务端,并将Hive和其他应用程序集成起来。

    Clients

    包含WebUI和JDBC/ODBC接口,为用户访问提供接口。

Hive CBO原理介绍

Hive CBO原理介绍

CBO(Cost Based Optimization),即基于代价的优化器。优化目标是:在编译阶段,根据查询语句中涉及到的表和查询条件,计算出产生中间结果少的高效join顺序,从而减少查询时间和资源消耗。

  • Hive中实现CBO的总体过程如下:
  • Hive使用开源组件Apache Calcite实现CBO。首先SQL语句转化成Hive的AST,然后转成Calcite可以识别的RelNodes。Calcite将RelNode中的Join顺序调整后,再由Hive将RelNode转成AST,继续Hive的逻辑优化和物理优化过程。

    Calcite调整Join顺序的具体过程如下:

    1、针对所有参与Join的表,依次选取一个表作为第一张表。

    2、依据选取的第一张表,根据代价选择第二张表,第三张表。由此可以得到多个不同的执行计划。

    3、计算出代价最小的一个计划,作为最终的顺序优化结果。

Hive与其他组件的关系

  • Hive与HDFS组件的关系

    Hive是Apache的Hadoop项目的子项目,Hive利用HDFS作为其文件存储系统。Hive通过解析和计算处理结构化的数据,Hadoop HDFS则为Hive提供了高可靠性的底层存储支持。Hive数据库中的所有数据文件都可以存储在Hadoop HDFS文件系统上,Hive所有的数据操作也都是通过Hadoop HDFS接口进行的。

    Hive是Apache的Hadoop项目的子项目,Hive利用HDFS作为其文件存储系统。Hive通过解析和计算处理结构化的数据,Hadoop HDFS则为Hive提供了高可靠性的底层存储支持。Hive数据库中的所有数据文件都可以存储在Hadoop HDFS文件系统上,Hive所有的数据操作也都是通过Hadoop HDFS接口进行的。

  • Hive与MapReduce组件的关系

    Hive的数据计算依赖于MapReduce。MapReduce也是Apache的Hadoop项目的子项目,它是一个基于Hadoop HDFS分布式并行计算框架。Hive进行数据分析时,会将用户提交的HQL语句解析成相应的MapReduce任务并提交MapReduce执行。

    Hive的数据计算依赖于MapReduce。MapReduce也是Apache的Hadoop项目的子项目,它是一个基于Hadoop HDFS分布式并行计算框架。Hive进行数据分析时,会将用户提交的HQL语句解析成相应的MapReduce任务并提交MapReduce执行。

  • Hive与Tez的关系

    Tez是Apache的开源项目,它是一个支持有向无环图的分布式计算框架,Hive使用Tez引擎进行数据分析时,会将用户提交的HQL语句解析成相应的Tez任务并提交Tez执行。

    Tez是Apache的开源项目,它是一个支持有向无环图的分布式计算框架,Hive使用Tez引擎进行数据分析时,会将用户提交的HQL语句解析成相应的Tez任务并提交Tez执行。

  • Hive与DBService的关系

    Hive的MetaStore(元数据服务)处理Hive的数据库、表、分区等的结构和属性信息(即Hive的元数据),这些信息需要存放在一个关系型数据库中,由MetaStore管理和处理。在产品中,Hive的元数据由DBService组件存储和维护,由Metadata组件提供元数据服务。

    Hive的MetaStore(元数据服务)处理Hive的数据库、表、分区等的结构和属性信息(即Hive的元数据),这些信息需要存放在一个关系型数据库中,由MetaStore管理和处理。在产品中,Hive的元数据由DBService组件存储和维护,由Metadata组件提供元数据服务。

Hive开源增强特性

  • Hive开源增强特性:支持HDFS Colocation

    HDFS Colocation(同分布)是HDFS提供的数据分布控制功能,利用HDFS Colocation接口,可以将存在关联关系或者可能进行关联操作的数据存放在相同的存储节点上。

    Hive支持HDFS的Colocation功能,即在创建Hive表时,通过设置表文件分布的locator信息,可以将相关表的数据文件存放在相同的存储节点上,从而使后续的多表关联的数据计算更加方便和高效。

    HDFS Colocation(同分布)是HDFS提供的数据分布控制功能,利用HDFS Colocation接口,可以将存在关联关系或者可能进行关联操作的数据存放在相同的存储节点上。

    Hive支持HDFS的Colocation功能,即在创建Hive表时,通过设置表文件分布的locator信息,可以将相关表的数据文件存放在相同的存储节点上,从而使后续的多表关联的数据计算更加方便和高效。

  • Hive开源增强特性:支持列加密功能

    Hive支持对表的某一列或者多列进行加密。在创建Hive表时,可以指定要加密的列和加密算法。当使用insert语句向表中插入数据时,即可将对应的列进行加密。Hive列加密不支持视图以及Hive over HBase场景。

    Hive列加密机制目前支持的加密算法有两种,具体使用的算法在建表时指定。其中:

    AES(对应加密类名称为:org.apache.hadoop.hive.serde2.AESRewriter)

    SMS4(对应加密类名称为:org.apache.hadoop.hive.serde2.SMS4Rewriter)

    Hive支持对表的某一列或者多列进行加密。在创建Hive表时,可以指定要加密的列和加密算法。当使用insert语句向表中插入数据时,即可将对应的列进行加密。Hive列加密不支持视图以及Hive over HBase场景。

    Hive列加密机制目前支持的加密算法有两种,具体使用的算法在建表时指定。其中:

    AES(对应加密类名称为:org.apache.hadoop.hive.serde2.AESRewriter)

    SMS4(对应加密类名称为:org.apache.hadoop.hive.serde2.SMS4Rewriter)

  • Hive开源增强特性:支持行分隔符

    通常情况下,Hive以文本文件存储的表会以回车作为其行分隔符,即在查询过程中,以回车符作为一行表数据的结束符。

    但某些数据文件并不是以回车分隔的规则文本格式,而是以某些特殊符号分割其规则文本。

    MRS Hive支持指定不同的字符或字符组合作为Hive文本数据的行分隔符。

    通常情况下,Hive以文本文件存储的表会以回车作为其行分隔符,即在查询过程中,以回车符作为一行表数据的结束符。

    但某些数据文件并不是以回车分隔的规则文本格式,而是以某些特殊符号分割其规则文本。

    MRS Hive支持指定不同的字符或字符组合作为Hive文本数据的行分隔符。

  • Hive开源增强特性:支持HBase删除功能

    由于底层存储系统的原因,Hive并不能支持对单条表数据进行删除操作,但在Hive on HBase功能中,MRS解决方案中的Hive提供了对HBase表的单条数据的删除功能,通过特定的语法,Hive可以将自己在HBase表中符合条件的一条或者多条数据清除。

    由于底层存储系统的原因,Hive并不能支持对单条表数据进行删除操作,但在Hive on HBase功能中,MRS解决方案中的Hive提供了对HBase表的单条数据的删除功能,通过特定的语法,Hive可以将自己在HBase表中符合条件的一条或者多条数据清除。

  • Hive开源增强特性:支持数据库授权

    Hive开源社区版本只支持数据库的拥有者在数据库中创建表。MRS Hive支持授予用户在数据库中创建表“CREATE”和查询表“SELECT”权限。当授予用户在数据库中查询的权限之后,系统会自动关联数据库中所有表的查询权限。

    Hive开源社区版本只支持数据库的拥有者在数据库中创建表。MRS Hive支持授予用户在数据库中创建表“CREATE”和查询表“SELECT”权限。当授予用户在数据库中查询的权限之后,系统会自动关联数据库中所有表的查询权限。

  • Hive开源增强特性:支持列授权

    Hive开源社区版本只支持表级别的权限控制。MRS Hive支持列级别的权限控制,可授予用户列级别权限,例如查询“SELECT”、插入“INSERT”、修改“UPDATE”权限。

    Hive开源社区版本只支持表级别的权限控制。MRS Hive支持列级别的权限控制,可授予用户列级别权限,例如查询“SELECT”、插入“INSERT”、修改“UPDATE”权限。