Apache Hive 3.x 的重大变更改进了Apache Hive 2.x事务和安全性。了解这些版本之间的主要差异对于 SQL 用户至关重要,包括使用 Apache Spark 和 Apache Impala 的用户。
这是CDP中Apache Hive3用户指南系列之一,之前的文章请参考<CDP的Hive3系列之Hive Metastore介绍>.
1. Apache Hive3特性
Hive 是一个数据仓库系统,用于汇总、查询和分析庞大的不同数据集。
1.1 ACID 事务处理
Hive 3 表符合 ACID(原子性、一致性、隔离性和持久性)。Hive 3 写入和读取操作提高了事务表的性能。原子操作包括简单的写入和插入、写入多个分区以及在单个 SELECT 语句中进行多次插入。读取操作不受操作期间发生的更改的影响。您可以插入或删除数据,并且在软件和硬件崩溃期间保持一致。这简化了 Hive 表的创建和维护,因为hive不再需要使用Bucket表。
1.2 物化视图
由于多个查询经常需要同一个中间汇总表或连接表,因此您可以通过预先计算中间表并将其缓存到视图中来避免成本高昂、重复的查询部分共享。
1.3 查询结果缓存
Hive 过滤和缓存相似或相同的查询。Hive 不会重新计算未更改的数据。当成百上千的 BI 工具和 Web 服务用户查询 Hive 时,缓存重复查询可以显着减少负载。
1.4 计划查询
使用 SQL 语句,您可以安排 Hive查询重复运行、监控查询进度、暂时忽略查询计划并限制并行运行的数量。例如,您可以使用计划查询来启动压缩并定期重建物化视图。
1.5 Spark 与 Hive 的集成
Spark 和 Hive 表使用 Hive Warehouse Connector 和 Spark Direct Reader 进行互操作以访问 ACID 管理的表。您可以使用 SparkSQL 直接从 Spark 访问外部表。
您不需要使用 HWC 来读取或写入 Hive 外部表。Spark 用户只是直接从 Hive 读取或写入。您可以读取 ORC 或 Parquet 格式的 Hive 外部表。但是您只能以 ORC 格式写入到 Hive 的外部表。
1.6 安全改进
默认使用Apache Ranger 保护 Hive 的数据。为了满足并发改进、ACID 支持、渲染安全性和其他功能的需求,Hive 严格控制文件系统或对象存储上的仓库位置以及内存资源。
借助 Apache Ranger 和 Apache Hive ACID的支持,您的组织将准备好支持和实施 GDPR(通用数据保护条例)。
1.7 查询级别的工作负载管理
您可以配置谁使用查询资源、可以使用多少、以及 Hive 响应资源请求的速度。工作负载管理可以改进并行查询执行、查询的集群共享和查询性能。尽管名称相似,但 Hive 工作负载管理查询与 Cloudera Workload XM 无关,用于报告和查看数百万个查询和数百个数据库。
1.8 连接池
Hive 支持 HakariCP JDBC 连接池。
1.9 不支持的功能
CDP 不支持 HDP 和 CDH 平台中可用的以下功能:
· 指定托管表位置的 CREATE TABLE语句
不要使用 LOCATION 子句来创建托管表。Hive 将仓库中的默认位置分配给托管表。
· 创建索引
Hive 自动在ORC或者Parquet的主表中构建和存储索引,而不是将索引维护在不同的表中。设置 hive.optimize.index.filter为启用使用(不推荐——改为使用物化视图)。在升级期间,现有索引在Parquet 或 ORC 中保留并迁移到 CDP。
2 Hive on Tez 简介
Cloudera 数据平台 (CDP) 服务,提供 Apache Tez 执行的 Apache Hive SQL 数据库。
Hive on Tez 服务提供基于 Apache Hive 3.x 的基于 SQL 的数据仓库系统。Hive 3.x 中相对于以前版本的增强可以提高 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
3 Hive 不支持的接口和功能
您需要了解不受支持的 HDP 或 CDH 平台中可用的接口。
CDP Private Cloud Base不支持以下接口:
· Druid
· Hcat CLI (however HCatalog is supported)
· Hive CLI (replaced by Beeline)
· Hive View
· LLAP
· MapReduce execution engine (replaced by Tez)
· Pig
· S3 for storing tables
· Spark execution engine (replaced by Tez)
· Spark thrift server
Spark 和 Hive 表使用 Hive 仓库连接器(HWC)进行互操作。
· SQL 标准授权
· Tez View
o WebHCat
您可以使用 Hue 代替 Hive View。
3.1 部分不支持的接口
不支持使用 Apache Hadoop 分布式副本 (DistCP) 来复制 Hive ACID 表。
4 Apache Hive 3 架构概述
了解 Apache Hive 3 的主要设计特性,例如默认的ACID 事务处理,可以帮助您使用Hive 来满足企业数据仓库系统不断增长的需求。
4.1 数据存储和访问控制
支持 Hive 3 设计的主要架构更改之一使Hive 可以更好地控制元数据内存资源和文件系统或对象存储。从 Hive 2 到 Hive 3 的以下架构更改提供了更高的安全性:
· 严格控制文件系统和计算机内存资源,取代灵活的边界:明确的边界增加了可预测性。更好的文件系统控制可提高安全性。
· 在共享文件和 YARN 容器中优化的工作负载
Hive 3 通过以下方式针对对象存储进行了优化:
· Hive 使用 ACID 来确定要读取的文件,而不是依赖于存储系统。
· 在 Hive 3 中,文件移动比 Hive 2 中减少了。
· Hive 主动缓存元数据和数据以减少文件系统操作
Hive 的主要授权模型是 Ranger。Hive 强制执行 Ranger 中指定的访问控制。此模型提供比其他安全方案更强的安全性,并在管理策略方面具有更大的灵活性。
该模型只允许 Hive 访问 Hive 仓库。
4.2 事务处理
您可以利用以下事务处理特性来部署新的 Hive 应用程序类型:
· ACID 事务处理的成熟版本:
ACID 表是默认的表类型。
默认启用的 ACID 不会导致性能或操作过载。
· 简化的应用程序开发、具有强大事务保证的操作以及 SQL 命令的简单语义
· 您不需要存储 ACID 表。
· 物化视图重写
· 自动查询缓存
· 高级优化
4.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.4 Apache Hive Metastore 共享
Hive、Impala 和其他组件可以共享远程的 Hive Metastore。
4.5 Spark集成
Spark 和 Hive 表使用Hive Warehouse Connector(HWC)进行互操作。
您可以使用 HWC从Spark 访问 ACID 和外部表。您不需要 使用HWC即可从 Spark 读取 Hive 外部表并从 Spark 写入 Hive 外部表。您也不需要使用 HWC 即可读取或写入 Hive的 外部表。Spark 用户只是直接从 Hive 读取或写入数据。您可以读取 ORC 或 Parquet 格式的 Hive 外部表,但是您只能以 ORC 格式写入 Hive的外部表。
4.6 批处理和交互式工作负载的查询执行
您可以使用 JDBC 命令行工具(例如 Beeline)或使用 JDBC/ODBC 驱动程序和 BI 工具(例如 Tableau)连接到 Hive。您可以为每个实例配置设置文件以执行批处理或交互式处理。