CDP中的Hive3之Apache Hive3特性
CDP中的Hive3之Apache Hive3特性
CDP中采用的是Apache Hive3版本,相比Hive1/2,该版本在事务和安全性等方面有重大改进,了解这些版本之间的主要差异对于SQL用户至关重要,包括使用Apache Spark和Apache Impala的用户
1、Apache Hive3特性
Hive是一个数据仓库系统,用于汇总、查询和分析庞大的不同数据集。Apache Hive3的重大变更主要改进了Apache Hive2的事务和安全性
1)ACID事务处理
Hive3的表符合ACID(原子性、一致性、隔离性和持久性)
Hive3写入和读取操作提高了事务表的性能。原子操作包括简单的插入、写入多个分区以及在单个SELECT语句中进行多次插入
读取操作不受操作期间发生更改的影响。您可以插入或删除数据,并且在软件和硬件崩溃期间保持一致。这简化了Hive表的创建和维护,因为Hive不再需要使用Bucket表
2)物化视图
由于多个查询经常需要同一个中间汇总表或连接表,因此您可以通过预先计算中间表并将其缓存到视图中来避免成本高昂、重复的查询部分共享
3)查询结果缓存
Hive过滤和缓存相似或相同的查询。Hive不会重新计算未更改的数据。当成百上千的BI工具和Web服务用户查询Hive时,缓存重复查询可以显着减少负载
4)计划查询
使用SQL语句,您可以安排Hive查询重复运行、监控查询进度、暂时忽略查询计划并限制并行运行的数量。例如,您可以使用计划查询来启动压缩并定期重建物化视图
5)安全改进
默认使用Apache Ranger保护Hive的数据。为了满足并发改进、ACID支持、渲染安全性和其他功能的需求,Hive严格控制文件系统或对象存储上的仓库位置以及内存资源
借助Apache Ranger和Apache Hive ACID的支持,您的组织将准备好支持和实施GDPR(General Data Protection Regulation,通用数据保护条例)
6)连接池
Hive支持HakariCP JDBC连接池
7)查询级别的工作负载管理
您可以配置谁使用查询资源、可以使用多少、以及Hive响应资源请求的速度。工作负载管理可以改进并行查询执行、查询的集群共享和查询性能。尽管名称相似,但Hive工作负载管理查询与Cloudera Workload XM无关,用于报告和查看数百万个查询和数百个数据库
8)Spark与Hive集成
Spark和Hive表使用HWC(Hive Warehouse Connector)和Spark Direct Reader进行互操作以访问ACID管理的表。您可以使用SparkSQL直接从Spark访问外部表
您不需要使用HWC来读取或写入Hive外部表。Spark用户只是直接从Hive读取或写入。您可以读取ORC或Parquet格式的Hive外部表。但是您只能以ORC格式写入到Hive的外部表
9)不支持的功能
CDP不支持HDP和CDH平台中可用的以下功能:
-
多个INSERT OVERWRITE从源表读取数据的查询
-
指定托管表位置的CREATE TABLE语句
不要使用LOCATION子句来创建托管表。Hive将仓库中的默认位置分配给托管表
-
创建索引
Hive自动在ORC或Parquet的主表中构建和存储索引,而不是将索引维护在不同的表中。设置
hive.optimize.index.filter
为启用使用(不推荐,改为使用物化视图)。在升级期间,现有索引在Parquet或ORC中保留并迁移到CDP
2、Hive不支持的接口和功能
3、Hive on Tez简介
Cloudera数据平台(CDP)服务,提供Apache Tez执行的Apache Hive SQL数据库
Hive on Tez服务提供基于Apache Hive3的基于SQL的数据仓库系统。Hive3中相对于以前版本的增强可以提高SQL查询性能、安全性和审计功能
Hive Metastore(HMS)是一个单独的服务,不是Hive的一部分,甚至不一定在同一个集群上。HMS将元数据存储在后端,用于Hive、Impala、Spark和其他组件
Apache Tez是Hive on Tez服务的Hive执行引擎,其中包括Cloudera Manager中的HiveServer(HS2),不支持MapReduce。在Cloudera集群中,如果遗留脚本或应用程序指定MapReduce执行,则会发生异常。大多数用户定义的函数(UDF)不需要更改即可在Tez而不是MapReduce上执行
通过有向无环图(DAG)和数据传输原语的表达式,在Tez上执行Hive查询代替MapReduce提高了查询性能。在Cloudera Data Platform(CDP)中,Tez通常仅供Hive使用,并在Tez上的Hive启动时自动启动和管理Tez AM。您提交给Hive的SQL查询执行如下:
- Hive编译查询
- Tez执行查询
- 为整个集群的应用程序分配资源
- Hive更新数据源中的数据并返回查询结果
Hive on Tez在临时容器上运行任务并使用标准的YARN Shuffle服务。默认情况下,Hive数据存储在HDFS上。如果您不启用Ranger安全服务或其他安全性,默认情况下Hive使用基于用户模拟的基于存储的授权(SBA)
官方文档:https://docs.cloudera.com/cdp-private-cloud-base/latest/hive-introduction/topics/hive-on-tez.html
4、Apache Hive3架构概述
了解Apache Hive3的主要设计特性,例如,默认的ACID事务处理,可以帮助您使用Hive 来满足企业数据仓库系统不断增长的需求
1)数据存储和访问控制
支持Hive3设计的主要架构更改之一使Hive可以更好地控制元数据内存资源和文件系统或对象存储。从Hive2到Hive3的以下架构更改提供了更高的安全性:
- 严格控制文件系统和计算机内存资源,取代灵活的边界:明确的边界增加了可预测性。更好的文件系统控制可提高安全性
- 在共享文件和YARN容器中优化的工作负载
Hive3通过以下方式针对对象存储进行了优化:
- Hive使用ACID来确定要读取的文件,而不是依赖于存储系统
- 在Hive3中,文件移动比Hive2中减少了
- Hive主动缓存元数据和数据以减少文件系统操作
2)事务处理
您可以利用以下事务处理特性来部署新的Hive应用程序类型:
- ACID事务处理的成熟版本:
- ACID表是默认的表类型
- 默认启用的ACID不会导致性能或操作过载
- 简化的应用程序开发、具有强大事务保证的操作以及SQL命令的简单语义
- 您不需要对ACID表进行桶存储
- 物化视图重写
- 自动查询缓存
- 高级优化
3)Hive客户端的更改
您可以使用瘦客户端Beeline从命令行查询Hive。您可以从命令行运行Hive管理命令
Beeline使用Hive的JDBC连接来执行命令。Hive解析、编译和执行操作。Beeline支持Hive CLI支持的许多命令行选项。Beeline不支持hive -e set key=value
来配置Hive Metastore
您可以通过使用hive
关键字、命令选项和命令调用Beeline来输入受支持的Hive CLI命令。例如,hive -e set
使用Beeline代替不再支持的胖客户端Hive CLI有几个优点,包括低开销。Beeline不使用整个Hive代码库。执行查询所需的少量守护程序简化了监控和调试
Hive强制执行白名单和黑名单设置,您可以使用SET命令更改这些设置。使用黑名单,您可以限制内存配置更改以防止不稳定。不同的Hive实例具有不同的白名单和黑名单,以建立不同级别的稳定性
4)Apache Hive Metastore共享
Hive、Impala和其他组件可以共享远程的Hive Metastore
5)批处理和交互式工作负载的查询执行
您可以使用JDBC命令行工具(例如Beeline)或使用JDBC/ODBC驱动程序和BI工具(例如Tableau)连接到Hive。您可以为每个实例配置设置文件以执行批处理或交互式处理
6)Spark集成
Spark和Hive表使用Hive Warehouse Connector(HWC)进行互操作
您可以使用HWC从Spark访问ACID和外部表。您不需要使用HWC即可从Spark读取Hive外部表并从Spark写入Hive外部表
您不需要使用HWC即可读取或写入Hive的外部表。Spark用户只是直接从Hive读取或写入数据。您可以读取ORC或Parquet格式的Hive外部表,但是您只能以ORC格式写入Hive的外部表
原文地址:https://blog.csdn.net/weixin_55629186/article/details/145095067
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!