前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CDP的hive3概述

CDP的hive3概述

作者头像
大数据杂货铺
发布2020-02-11 16:00:50
3K0
发布2020-02-11 16:00:50
举报

01

Apache Hive3概述

Apache Hive3的主要功能

Cloudera Runtime(CR)服务包括Hive和Hive Metastore。Hive服务基于Apache Hive 3.x(基于SQL的数据仓库系统)。Hive 3.x与以前版本相比的增强功能可以提高查询性能并符合Internet法规。

ACID事务处理

Hive 3表符合ACID(原子性、一致性、隔离性和耐久性)标准,这对于遵守GDPR(通用数据保护法规)被遗忘的权利至关重要。

共享的Hive Metastore

Hive Metastore(HMS)可与多个引擎(例如Impala和Spark)互操作,从而简化了引擎与用户数据访问之间的互操作。

低延迟分析处理(CDP公共云)

Hive使用低延迟分析处理(LLAP)或Apache Tez执行引擎来处理事务。Hive LLAP服务在CDP数据中心中不可用。

Hive集成Spark

您可以使用Hive从Apache Spark应用程序查询数据,而无需解决方法。Hive Warehouse Connector支持从Spark读取和写入Hive表。

安全改进

默认情况下,Apache Ranger保护Hive数据。为了满足对并发性改进的需求,对GDPR的ACID支持,渲染安全性和其他功能,Hive严格控制了仓库在文件系统或对象存储以及内存资源上的位置。

查询级别的工作负载管理

您可以配置谁使用查询资源,可以使用多少资源以及Hive对资源请求的响应速度。工作负载管理可以改善并行查询的执行,查询的集群共享以及查询性能。

物化视图

因为多个查询经常需要相同的中间汇总表或联接表,所以可以通过将中间表预先计算和缓存到视图中来避免昂贵、重复的查询部分共享。

查询结果缓存

配置单元过滤并缓存相似或相同的查询。Hive不会重新计算未更改的数据。当数百个或数千个BI工具和Web服务的用户查询Hive时,缓存重复查询可以大大减少负载。

information_schema

启动后,Hive从JDBC数据源创建两个数据库:information_schema和sys。所有Metastore表都映射到您的表空间中,并且在sys中可用。information_schema数据显示系统状态,类似于sys数据库数据。您可以使用SQL标准查询来查询information_schema。

接口不可用或不支持

  • S3和LLAP(仅CDP数据中心7.0)
  • Hive CLI(由Beeline取代)
  • WebHCat
  • Hcat CLI
  • SQL标准授权
  • MapReduce执行引擎(由Tez取代)

Apache Hive 3架构概述

了解Apache Hive 3的主要设计功能(例如默认的ACID事务处理)可以帮助您使用Hive满足企业数据仓库系统不断增长的需求。

Apache Tez

Apache Tez是Cloudera Manager中Hive-on-Tez服务的Hive执行引擎。不支持MapReduce。在Cloudera集群中,如果旧脚本或应用程序指定MapReduce执行,则会发生异常。大多数用户定义函数(UDF)不需要更改即可在Tez上执行,而无需执行MapReduce。

使用有向无环图(DAG)的表达式和数据传输原语,在Tez上而不是MapReduce上执行Hive查询可以提高查询性能。在Cloudera Data Plane(CDP)中,Tez通常仅由Hive使用,并且HiveServer会在HiveServer2启动时自动启动并管理Tez AM。您提交给Hive的SQL查询的执行方式如下:

  • Hive编译查询。
  • Tez执行查询。
  • 资源是为整个集群中的应用程序分配的。
  • Hive更新数据源中的数据并返回查询结果。

Hive on Tez在临时容器上运行任务,并使用标准的YARN shuffle服务。

数据存储和访问控制

支持Hive 3设计的主要架构更改之一使Hive对元数据内存资源和vfile系统或对象存储有了更多控制。从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安全服务或其他安全性,则默认情况下,Hive会根据用户模拟使用CDP数据中心基于存储的授权(SBA)。

HDFS权限更改

在CDP数据中心中,SBA严重依赖于HDFS访问控制列表(ACL)。ACL是HDFS中权限系统的扩展。默认情况下,CDP数据中心在HDFS中打开ACL,为您提供以下优势:

  • 授予多个组和用户特定权限时增加了灵活性
  • 方便地将权限应用于目录树,而不是单个文件

事务处理

您可以利用以下事务处理特性来部署新的Hive应用程序类型:

  • ACID事务处理的成熟版本:

ACID表是默认的表类型。

默认情况下启用ACID不会导致性能或操作过载。

  • 简化应用程序开发,具有强大事务保证的操作以及SQL命令的简单语义

您不需要存储ACID表。

  • 物化视图重写
  • 自动查询缓存
  • 高级优化

Hive客户端变更

CDP数据中心支持在命令行上使用瘦客户端Beeline。您可以从命令行运行Hive管理命令。Beeline使用与HiveServer的JDBC连接来执行命令。解析、编译和执行操作在HiveServer中进行。Beeline支持Hive CLI支持的许多命令行选项。Beeline不支持 hive -e set key=value来配置Hive Metastore。

通过使用hive 关键字、命令选项和命令来调用Beeline,可以输入受支持的Hive CLI命令。例如,hive -e set。使用Beeline代替不再受支持的胖客户端Hive CLI具有许多优点,包括较低的开销。Beeline不会使用整个Hive代码库。执行查询所需的少量守护程序简化了监视和调试。

HiveServer强制执行您可以使用SET命令更改的白名单和黑名单设置。使用黑名单,您可以限制内存配置更改,以防止HiveServer不稳定。您可以使用不同的白名单和黑名单配置多个HiveServer实例,以建立不同级别的稳定性。

您可以使用grunt命令行与Apache Pig一起使用。

Apache Hive Metastore共享

HiveServer,Impala和其他组件可以共享远程Hive元存储。在CDP公共云中,HMS使用预安装的MySQL数据库。您几乎没有执行HMS或仅在云中进行HMS的配置。

Spark集成

在某些情况下,Spark和Hive表可以使用Hive Warehouse连接器进行互操作。

您可以使用Hive Warehouse连接器从Spark访问ACID和外部表。您不需要Hive Warehouse Connector即可从Spark读取Hive外部表并从Spark写入Hive外部表。

查询批处理和交互式工作负载的执行

您可以使用JDBC命令行工具(例如Beeline)或使用JDBC/ODBC驱动程序和BI工具(例如Tableau)连接到Hive。客户端与相同HiveServer版本的实例进行通信。您可以为每个实例配置设置文件以执行批处理或交互式处理。

02

Apache Hive3性能调优

低延迟分析处理

CDP公共云支持Hive查询的低延迟分析处理(LLAP)。使用CDP数据仓库服务中可使用LLAP,您可以调整数据仓库基础结构、组件和客户端连接参数,以提高性能和与商务智能和其他应用程序的相关性。

企业越来越希望运行SQL工作负载,这些工作负载返回的结果要比批处理提供的结果更快。这些企业通常希望数据分析应用程序支持交互式查询。低延迟分析处理(LLAP)可以提高交互式查询的性能。在CDP公共云上运行的Hive交互式查询满足了低延迟、可变参数基准,Hive LLAP在15秒或更短的时间内响应了该基准。LLAP使应用程序开发和IT基础结构能够运行返回实时或接近实时结果的查询。

CDP数据中心版不支持LLAP。

高性能Hive的最佳做法

在调整Apache Hive之前,您应该遵循最佳实践。这些准则包括如何配置群集,存储数据和编写查询。

  • 在需要资源来处理查询时,可以在CDP公共云中调整自动缩放以扩大规模。
  • 接受默认设置以使用Tez作为执行引擎。在CDP中,MapReduce执行引擎由Tez代替。
  • 接受默认设置以禁用用户模拟。如果启用,请使用Cloudera Manager安全阀功能hive.server2.enable.doAs在 hive-site.xml中禁用 (请参阅下面的链接)。

LLAP缓存用于多个查询的数据,并且此功能不支持用户模拟。

  • 使用Ranger安全服务来保护您的群集和相关服务。
  • 使用ORC文件格式存储数据。
  • 通过检查解释计划,确保查询被完全矢量化。
  • 使用SmartSense工具检测常见的系统错误配置。

使用ORC最大化存储资源

您可以通过多种方式来节省存储空间,但是使用优化行列(ORC)文件格式存储Apache Hive数据最为有效。ORC是Hive数据的默认存储。

出于以下原因,建议使用Hive数据存储的ORC文件格式:

  • 高效压缩:存储为列并进行压缩,这会导致较小的磁盘读取。列格式也是Tez中矢量化优化的理想选择。
  • 快速读取:ORC具有内置索引,最小/最大值和其他聚合,导致在读取期间跳过整个条带。另外,谓词下推将过滤器推入读取,以便读取最少的行。布隆过滤器进一步减少了返回的行数。

在大规模部署中得到证明:Facebook将ORC文件格式用于300多个PB部署。

ORC总体上提供最佳的Hive性能。此外,要指定存储格式,还可以为表指定压缩算法,如以下示例所示:

CREATE TABLE addresses (
name string,
street string,
city string,
state string,
zip int
) STORED AS orc TBLPROPERTIES ("orc.compress"="Zlib");

通常不需要设置压缩算法,因为您的Hive设置包括默认算法。使用ORC高级属性,可以为点查找中经常使用的列创建Bloom过滤器。

Hive支持仅用于插入式ACID表和外部表的Parquet和其他格式。您还可以编写自己的SerDes(序列化器,反序列化器)接口以支持自定义文件格式。

高级ORC属性

通常,您不需要修改ORC属性,但是偶尔,Cloudera支持建议进行此类更改。您可以使用Cloudera Manager中的安全阀功能来更改属性。

使用分区提高性能

您可以使用分区来显着提高性能。您可以设计Hive表和物化视图分区以映射到文件系统/对象存储上的物理目录。例如,按日期时间划分的表可以组织每天加载到Hive中的数据。

大型部署可以具有成千上万个分区。当Hive在查询处理期间发现分区键时,分区修剪将间接发生。例如,在加入维表后,分区键可能来自维表。查询按分区过滤列,从而将扫描限制在一个或几个匹配的分区上。当WHERE子句中存在分区键时,将直接进行分区修剪。分区列是虚拟的,不写入主表,因为这些列对于整个分区都是相同的。在SQL查询中,您定义了分区,如以下示例所示:

CREATE TABLE sale(id in, amount decimal)
PARTITIONED BY (xdate string, state string);

要将数据插入此表中,请指定用于快速加载的分区键:

INSERT INTO sale (xdate='2016-03-08', state='CA')
SELECT * FROM staging_table
WHERE xdate='2016-03-08' AND state='CA';

您不需要指定动态分区列。如果启用动态分区,则Hive会生成分区规范。

用于加载1到9个分区的hive-site.xml设置:

SET hive.exec.dynamic.partition.mode=nonstrict;
SET hive.exec.dynamic.partition=true;

要将数据批量加载到分区的ORC表中,请使用以下属性,该属性可优化将数据加载到10个或更多分区中的性能。

用于加载10个或更多分区的hive-site.xml设置:

hive.optimize.sort.dynamic.partition=true

查询分区数据的示例

INSERT INTO sale (xdate, state)
SELECT * FROM staging_table;

对表进行分区和查询分区表时,请遵循以下最佳实践:

  • 切勿在唯一ID上分区。
  • 分区的大小平均大于或等于1 GB。
  • 设计查询以处理不超过1000个分区。

处理分桶表

如果将数据从Apache Hive的早期版本迁移到Hive 3,则可能需要处理影响性能的存储分桶表。

您可以将表或分区划分为存储区,这些存储区可以通过以下方式存储:

  • 作为表目录中的文件。
  • 如果表已分区,则作为分区目录。

无需在新的Hive 3表中使用存储分桶。

与存储分桶相关的一个常见挑战是在增加或减少工作负载或数据时保持查询性能。例如,您可能拥有一个使用16个存储分桶来支持1000个用户的平稳运行的环境,但是如果您不及时调整存储桶和分区,则用户数量激增到一两天就达到了100,000,这会产生问题。在使用表构建表之后,必须重新加载包含表数据的整个表,以减少,添加或删除表分桶,这使表桶调优变得很复杂。

使用Tez,您只需要处理最大的表上的分桶。如果工作负载需求快速变化,则较小表的存储分桶会动态更改以完成表JOIN。

您执行以下与存储分桶相关的任务:

  • 设置hive-site.xml以启用存储分桶
SET hive.tez.bucket.pruning=true
  • 既有分区又有分桶的批量加载表:

将数据加载到既分区又存储分桶的表中时,请设置以下属性以优化过程:

SET hive.optimize.sort.dynamic.partition=true

如果您有20个存储在user_id数据上的存储分桶,则以下查询仅返回与user_id = 1关联的数据:

SELECT * FROM tab WHERE user_id = 1;

为了最好地利用Tez上表分桶的动态功能,请采取以下做法:

  • 对最大表的存储分桶使用单个键。
  • 通常,您需要按最大维表对主表进行存储。例如,销售表可能是按客户存储的,而不是按商品或商店存储的。但是,在这种情况下,销售表是按物料和商店排序的。
  • 通常,不要在同一列上进行存储和排序。

如果表的存储分桶文件数超过行数,则表明您应该重新考虑表的存储方式。

原文:https://docs.cloudera.com/runtime/7.0.3/hive-introduction/topics/hive_whats_new_in_this_release_hive.html

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-12-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 大数据杂货铺 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Apache Hive3的主要功能
    • ACID事务处理
      • 共享的Hive Metastore
        • 低延迟分析处理(CDP公共云)
          • Hive集成Spark
            • 安全改进
              • 查询级别的工作负载管理
                • 物化视图
                  • 查询结果缓存
                    • information_schema
                      • 接口不可用或不支持
                      • Apache Hive 3架构概述
                        • Apache Tez
                          • 数据存储和访问控制
                            • HDFS权限更改
                              • 事务处理
                                • Hive客户端变更
                                  • Apache Hive Metastore共享
                                    • Spark集成
                                      • 查询批处理和交互式工作负载的执行
                                      • 低延迟分析处理
                                      • 高性能Hive的最佳做法
                                      • 使用ORC最大化存储资源
                                      • 使用分区提高性能
                                        • 查询分区数据的示例
                                        • 处理分桶表
                                        相关产品与服务
                                        对象存储
                                        对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
                                        领券
                                        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档