了解Apache Hive 3的主要设计功能(例如默认的ACID事务处理)可以帮助您使用Hive来满足企业数据仓库系统不断增长的需求。
Apache Tez
Apache Tez是Hive on Tez服务的Hive执行引擎,该服务包括Cloudera Manager中的HiveServer(HS2)。Tez不支持MapReduce。在Cloudera集群中,如果旧脚本或应用程序指定要执行的MapReduce,则会发生异常。大多数用户自定义函数(UDF)不需要更改即可在Tez上执行,而无需执行MapReduce。
使用有向无环图(DAG)的表达式和数据传输原语,在Tez而不是MapReduce上执行Hive查询可以提高查询性能。在Cloudera数据平台(CDP)中,Hive通常仅使用Tez引擎,并且在Hive on Tez启动时会自动启动和管理Tez AM。您提交给Hive的SQL查询的执行方式如下:
Hive编译查询。
Tez执行查询。
为整个集群中的应用程序分配资源。
Hive更新数据源中的数据并返回查询结果。
Hive on Tez在临时容器上运行任务,并使用标准的YARN shuffle服务。
数据存储和访问控制
支持Hive 3设计的主要架构更改之一使Hive对元数据内存资源和文件系统或对象存储有了更多的控制。从Hive 2到Hive 3的以下体系结构的变更提供了更高的安全性:
严格控制的文件系统和计算机内存资源,替代了灵活的边界:明确的边界提高了可预测性。更好的文件系统控制可提高安全性。
优化共享文件和YARN容器中的工作负载
默认情况下,CDP私有云基础版将Hive数据存储在HDFS上,CDP公共云将Hive数据默认存储在S3上。在公有云中,Hive仅将HDFS用于存储临时文件。Hive 3通过以下方式针对对象存储(例如S3)进行了优化:
Hive使用ACID来确定要读取的文件,而不是依赖于存储系统。
在Hive 3中,文件移动比在Hive 2中减少。
Hive积极地缓存元数据和数据,以减少文件系统的操作。
Hive的主要授权模型是Ranger。Hive强制实施Ranger中指定的访问控制。与其他安全方案相比,该模型提供了更强的安全性,并且在管理策略方面具有更大的灵活性。
此模型仅允许Hive访问数据仓库。如果未启用Ranger安全服务或其他安全性,则默认情况下,CDP私有云基础版的 Hive将基于用户模拟使用基于存储的授权(SBA)。
HDFS权限变更
在CDP私有云基础版中,SBA严重依赖于HDFS访问控制表(ACL)。ACL是HDFS中权限系统的扩展。默认情况下,CDP私有云基础版打开HDFS中的ACL,为您提供以下优势:
在授予多个用户组和用户特定权限时,增加了灵活性
方便地将权限应用于目录树,而不是单个文件
事务处理
您可以利用以下事务处理特性来部署新的Hive应用程序类型:
ACID事务处理的成熟版本:
ACID表是默认的表类型。
默认情况下启用ACID不会导致性能或操作过载。
简化的应用程序开发,具有强大事务保证的操作以及SQL命令的简单语义
您不需要对ACID表分桶。
重写的物化视图
自动的查询缓存
优化
Hive客户端变更
CDP私有云基础版支持瘦客户端Beeline在命令行上工作。您可以从命令行运行Hive管理命令。Beeline使用JDBC连接到Hive on Tez来执行命令。解析、编译和执行操作在Hive on Tez中进行。Beeline支持Hive CLI支持的许多命令行选项。但Beeline不支持hive -e set key=value的方式配置Hive Metastore。
通过使用hive 关键字、命令选项和命令调用Beeline,可以输入受支持的Hive CLI命令。例如,hive -e set。使用Beeline代替不再受支持的胖客户端Hive CLI具有许多优点,包括较低的开销。Beeline不会使用整个Hive代码库。执行查询所需的少量守护程序简化了监视和调试。
Hive on Tez会强制执行白名单和黑名单设置,您可以使用SET命令对其进行更改。使用黑名单,您可以限制内存配置更改,以防止不稳定。您可以在具有不同白名单和黑名单的Tez实例上配置多个Hive,以建立不同级别的稳定性。
Apache Hive Metastore共享
Hive、Impala和其他组件可以共享远程的Hive元存储。在CDP公共云中,HMS使用预安装的MySQL数据库。在公有云上,您几乎不需要配置或者很少的配置HMS。
整合Spark
Spark和Hive表使用Hive Warehouse Connector进行互操作。
您可以使用Hive Warehouse Connector从Spark访问ACID表和外部表。您不需要Hive Warehouse Connector即可从Spark读取Hive外部表并从Spark写入Hive外部表。您不需要HWC即可读取或写入Hive外部表。Spark用户只是直接从Hive中读取或写入。您可以读取ORC或Parquet格式的Hive外部表。但您只能以ORC格式写Hive的外部表。
查询批处理和交互式工作负载的执行
您可以使用JDBC命令行工具(例如Beeline)或使用JDBC / ODBC驱动程序和BI工具(例如Tableau)连接到Hive。客户端与同一个Hive on Tez版本的实例进行通信。您可以为每个实例配置设置文件以执行批处理或交互式处理。
原文链接:https://docs.cloudera.com/cdp-private-cloud/latest/upgrade/topics/hive-apache-hive-3-architectural-overview.html