【阿里云 CDP 公开课】 第九讲:Hive3 新特性

简介: 本文整理自 Cloudera 生态资深解决方案工程师王雪峰在 阿里云CDP公开课 上的分享。

本期导读 :【阿里云 CDP 公开课】第九讲


主题:Hive3 新特性

讲师:王雪峰,Cloudera 生态资深解决方案工程师


内容框架:

  • Hive3 的新功能
  • Hive3 的变更细节
  • 实操演示



直播回放链接:(第9讲)

https://developer.aliyun.com/live/248958


一、Hive3 的新功能

Hive3 的新功能

1)性能提升


  • 更好的SQL兼容性
  • Hive3支持绝大多数最新的ANSI SQL 2016标准;
  • ACID v2
  • 相比Hive2的ACID v1,v2在小文件、Stats、性能等方面都有了很大提升;
  • 查询Caching
  • 配置单元过滤并缓存相似或相同的查询。Hive不会重新计算未更改的数据,当数百个或数千个BI工具和Web服务的用户查询Hive时,缓存重复查询可以大大减少负载;
  • 物化视图
  • 多个查询经常需要相同的中间汇总表或联接表,所以可以通过将中间表预先计算和缓存到视图中来避免昂贵、重复的查询部分共享;
  • Hive on Tez:Hive3底层计算引擎使用Hive on Tez,通过内存来计算,性能是Hive2的50倍;

 


2)事务特性优化

 

  • 计划查询
  • JDBC 联邦
  • 启动后 Hive 从 JDBC 数据源创建两个数据库:information_schema和sys;
  • 所有Metastore表都映射到表空间中,并且在sys中可用;
  • information_schema数据显示系统状态,类似于sys数据库数据,可以使用SQL标准查询来查询information_schema;
  • Kafka Connector和Cloud Connectors:实现直接操作组件存储和应用;

 


3)托管表优化

 

  • 在Hive3中严格控制了文件系统和计算机的内存资源,提高整体性能的可预测性以及安全性;
  • 使用ACID来确定要读取的文件,而不依赖于之前的存储系统;
  • Hive3的文件移动比Hive2 减少很多;
  • 聚集的缓存元数据和数据减少对文件系统的操作;

 

4)Spark

 

  • 可以使用Hive从Spark应用程序查询数据,Hive Warehouse Connector(HWC)支持从Spark读取和写入Hive数据。

 


升级挑战:访问模式的更改

 

1)更高的安全性

 

  • KNOX代理直接访问;
  • 支持SSL接口访问;
  • 完整的Kerberos实施;
  • IDM 集成(许多服务的PAM默认值);
  • 通过KNOX实现单点登录;
  • 授权模型方面:CDP采用Ranger,Hive强制实施Ranger中指定的访问控制,与其他安全方案相比,为模型提供更强的安全性,并且在管理策略方面提供更大的灵活性;此模型仅允许Hive访问数据仓库。如果您未启用Ranger安全服务或其他安全性,则默认情况下,Hive会根据用户模拟使用CDP数据中心基于存储的授权;
  • HDFS权限更改:在CDP数据中心中,基于存储的授权严重依赖于HDFS访问控制列表(ACL),ACL是HDFS中权限系统的扩展,默认情况下CDP数据中心在HDFS中打开ACL。

 

2)Hive自身变化

 

  • HS2 vs. CLI (Beeline):Hive和Hive Sever分离,通过Hive Sever 2提供访问,同时,Hive CLI被Beeline取代;
  • 旧版脚本:Hive1和Hive2的旧版脚本,在Hive3中需要进行测试和调整;
  • 新的默认值:比如默认路径、默认结构等;
  • SQL 强制(CBO 改进);
  • 旧版的作业配置调整;
  • 旧版摄取模式调整:比如小文件摄取;
  • JDBC/ODBC驱动更新
  • JDBC/ODBC访问点控制;
  • 资源映射;
  • 托管表(v1 与v2);
  • 非模拟;
  • 更严格的ACL 检查(DDL);


3)Spark

 

  • 访问托管表:Spark不能直接访问Hive托管表,需要通过HWC进行操作,通过HWC从Spark访问Hive ACID表,外部表则无需通过HWC;
  • 组件升级(1.x 到2.x);
  • 适应更安全的环境;
  • 元存储翻译层;
  • 数据位置;


 

功能变化

 

  • 托管表:使用V2版本,针对不同的文件格式产生不同的作用,在定义和默认位置方面都会有调整;


  • 仓库位置:拆分托管表和外部表,以获得更好的治理标准;


  • 安全防控:有模拟和非模拟方式,推荐使用非模拟方式访问;


  • 数据安全治理:通过ACL整合和非模拟方式集成;


  • LLAP:CDP私有云和公有云版本中提供,而Base版本则不提供LLAP;


  • JDBC驱动程序更新。

 

功能移除

 

  • 执行引擎不再支持Hive on MR/Spark,由Hive on Tez执行;
  • 移除Hive CONCAT,使用ACID 表;
  • 移除Hive Indexes,使用物化视图代替;
  • 移除Hive CLI ,使用Beeline;
  • Tez View 从DAS 中移到Hue;
  • Oozie 的HiveAction被Hive2Action代替;

 


二、Hive3的变更细节 


1)Hive Metastore(HMS)转换层

 

  • 允许在各种Metastore用户之间安全共享元数据,如Hive、Spark和Impala;
  • 每个客户端技术(Hive、Spark 和 Impala)都支持读取和写入数据源的功能列表;
  • Metastore将这些功能与所请求的表相匹配,如果请求中存在不兼容,Metastore将向客户端提出异常并终止对表详细信息的内联请求;

 

在集成中推荐使用NON-IMPERSONATION(非模拟),doas=false方式。


 

2)通过翻译层进行规范化的副作用

 

Hive Metastore 转换层在HDP 3.1.5 及更高版本中可用,包括CDP-PvC Base 7.1+。

 

  • 更改了“数据库”LOCATION值的“使用”:LOCATION在外部表中可用,而在托管表中不可用,从历史上看(直到 HDP 3.1.4) ,它控制了“托管”表的基本目录,而现在(HDP 3.1.5 + 和 CDP-PvC Base 7.1),它代表“外部”位置的默认基本目录;


  • 控制“托管”表的基本位置,可以通过数据库的“MANAGEDLOCATION”进行控制(仅限 CDP 7.1+);




3)更改托管(ACID)表的“默认”位置

 

在CDP Runtime 7.1 及更高版本中可用(不在HDP 3 中)。

 

先决条件:

  • 对于非模拟 (doas=false),“hive”超级用户需要对该位置的 RW 访问权限;
  • SHOW DATABASE 不会显示托管位置;

 

1.png

 

4)结构转换为Hive Metastore

 

在Hive或Spark中创建的表由 Hive Metastore 翻译和调整,并在内部存储以匹配公认的最佳实践和术语。

 

2.png

 

  • 在Hive中创建CREATE Table默认创建支持ACID的托管表,需要文件格式是ORC;
  • 在Hive和在Spark中创建CREATE EXTERNAL都默认创建外表,这种外表的表结构和数据是分离的,当DROP Table后数据依然存在;
  • 在Spark中创建CREATE表默认创建EXTERNAL/PURGE表,这种表的表格式和数据是一体的,当DROP Table后,数据也跟着移除;
  • 外部表可以配置PURGE(相当于“经典”托管表)。

 

5)Hive1到Hive3会话

 

  • 执行引擎从 Hive on MR 迁移到 Hive on TEZ的,检查会阻碍TEZ的旧会话配置;
  • 原本就是Hive on TEZ的,CBO已经成熟,但许多旧的“会话”设置可能会产生负面影响;

 

因此推荐以下操作:

 

  • 查看查询设置的会话值,删除它们并重试,在相关的地方添加回来;
  • 检查统计数据,并在必要时刷新这些数据;
  • 定期进行Rebalance,整合小文件。

 


6)Hive3 Warehouse拆分/影响

 

针对托管和外部两个仓库位置:

  • 托管表在目录/warehouse/tablespace/managed/hive下:

可以通过“数据库”级别的“位置”设置调整位置;


  • 外部表在目录/warehouse/tablespace/external/hive下:

可以通过“TABLE”级别的“位置”设置调整位置;

 

Hive3的Warehouse构建模式,与Hive1和Hive2有很大不同,它覆盖CREATE TABLE中的位置:

  • 在托管表创建中设置“位置”,违反了posix安全性,继而创建失败;
  • 触发尝试有效 SBA 的外部代码路径;
  • 设置“位置”只能用于“外部”表。

 


7)Hive的细微默认值变更

 

Hive的细微默认值变更,比如CREATE TABLE,在 Hive 3 中是创建一个托管ACID 表,而在 Hive1和2中,是创建一个托管(非ACID)表,这意味着:

 

  • 如果“CREATE TABLE”表是应用程序工作流程的一部分,则该表的使用者必须是Hive或使用Spark HWC,因为该表将是一个 ACID 表;
  • 或者,将这些“CREATE TABLE”语句转换为“CREATE EXTERNAL TABLE”(带有清除)以保持与“经典托管表”之前相同的行为;

 

在CDP 7.1.4 中,新的“会话”级别配置将提供“CREATE TABLE”到“CREATE EXTERNAL TABLE”的自动转换。保存需要“经典”托管表的旧脚本的返工,结果是一个具有清除功能的“外部”表。

  • 用于会话级别控制的JDBC参数:hiveCreateAsExternalLegacy=true
  • HS2级别控制的HS2 配置:hive.create.as.external.legacy=true


 

8)Hive3的ODBC设置

 

推荐设置两个参数,来调整ODBC驱动程序设置(见下图):

  • Use Native Query = True (选中)
  • Get Tables With Query = False (不选)

 

4.png

 

通过以上设置,可以实现Hive访问性能优化,因此这些设置的相反值很可能会导致通过此 ODBC 接口使用 Hive 的应用程序性能不佳。

 

9)Spark 与 Hive 托管表的集成

 

Spark与Hive托管表的集成,主要是Spark读写Hive表的情况:

  • 托管表的访问模式推荐使用HWC (JDBC 模式) 低容量处理模式;
  • 也可以直接使用Hive Direct Read/Spark SQL模式来读取托管表;
  • 写入仍需要通过HWC模式;
  • 同时在读取时会存在未进行权限验证直接访问的安全隐患。

 


三、  Demo 演示

 

Demo 演示主要有两部分:Hive3的ACID和Hive3的Merge,会在Zeppelin中进行操作。

 

Hive3的ACID

 

详细步骤如下:


1)创建表:Hive ACID

CRAETE TABLE IF NOT EXISTS hello_acid (key int,value int)

5.png

 

查看建表语句;

show create table hello_acid

 

查看表信息:

INSERT INTO hello_acid PARTITION (load_date) VALUES

 


2)插入数据;

INSERT INTO hello_acid PARTITION (load_date) VALUES

6.png


数据查询:

Select * FROM hello_acid

7.png

 

3)删除key=2的记录

DELETE FROM hello_acid WHERE key = 2

8.png


数据查询:key=2的记录被删除

9.png

 

4)数据更新,将key=3的数据更新成10;

UPDATE hello_acid SET value = 10 WHERE key = 3

10.png


数据查询

11.png

 

5)创建mydim表,并插入三条记录;

12.png

 

6)创建中间表update_staging_table,并插入数据;

13.png

 

查看表记录

14.png

 

根据中间表的key值更新mydim数据,结果显示影响了2个记录,接着进行数据查询,显示有2个记录由true变成false:

 

UPDATE mydim SET is_current = false WHERE mydim.key IN (SELECT key FROM update_staging_table)

15.png

 

根据中间表数据进行数据删除,结果显示将2个false的记录删除,只剩下true的1条记录;

 

DELETE FROM mydim WHERE mydim.key IN (SELECT  key FROM update_staging_table)

16.png

 

7)信息查询:

 

交易信息:

17.png

 

锁信息:

18.png

 

row_id:

19.png

 

Hive 3的Merge

 

详细步骤如下:


1)创建数据库、创建表;

 

CREATE DATABASE merge_data
CREAT TABLE merge_data.transaction
CREAT TABLE merge_data.merge_source

 1.png

 

2)向两个表中插入记录

 

INSERT INTO merge_data.transaction PARTITION (tran_date) VALUES
INSERT INTO merge_data.merge_source VALUES

2.png

 

2)进行merge操作

 

MERGE INTO merge_data.transactions AS T
USING merge_data.merge_source AS S
ON T.ID = S.ID and T.tran_date = S.tran_date
WHEN MATCHED AND (T.TranValue != S.TranValue AND S.TranValue IS NOT NULL) THEN UPDATE SET TranValue = S.TranValue, last_update_user = ‘merge_update’
WHEN MATCHED AND S.TranValue IS NULL THEN DELETE
WHEN NOT MATCHED THEN INSERT VALUES (S.ID, S.TranValue, ‘merge_insert’, S.tran_date)

3.png

 

查看merge后的数据

4.png  

另外,在CDP中,无论是Hive、Spark和Impala,都是通过Ranger来管理的,在Ranger的Hadoop SQL里进行设置。

5.png



点击回放链接,观看第9讲视频回放,获取讲师实例讲解:

   https://developer.aliyun.com/live/248958



更多信息

产品试用

1.png

目前,CDP产品支持三个场景试用体验:

第一,CDP沙箱环境。主要测试常用场景:如构建数仓、ETL等常见的大数据分析场景,以及测试安全、数据血缘和治理等组件。

第二,Edge2AI场景。在此Edge2Al的实操实验中,将为IoT预测性维护用例构建完整的OTIT的工作流。

第三,CDP Base+Data Service。测试存算分离,新一代容器化计集群,用户体验良好的APP等。


立即开通:https://cloudera.console.aliyun.com/?

试用申请:https://survey.aliyun.com/apps/zhiliao/owtTaIQU3



技术交流

钉钉扫描下方二维码加入产品交流群一起参与讨论吧!

2.jpg



相关文章
|
SQL 分布式计算 资源调度
阿里云MaxCompute-Hive作业迁移语法兼容性踩坑记录
阿里云MaxCompute-Hive作业迁移语法兼容性踩坑记录
1302 0
|
7月前
|
SQL 数据可视化 Apache
阿里云数据库内核 Apache Doris 兼容 Presto、Trino、ClickHouse、Hive 等近十种 SQL 方言,助力业务平滑迁移
阿里云数据库 SelectDB 内核 Doris 的 SQL 方言转换工具, Doris SQL Convertor 致力于提供高效、稳定的 SQL 迁移解决方案,满足用户多样化的业务需求。兼容 Presto、Trino、ClickHouse、Hive 等近十种 SQL 方言,助力业务平滑迁移。
|
SQL 存储 资源调度
Hive3新特性 2
Hive3新特性
228 0
Hive3新特性 2
|
SQL 分布式计算 Java
阿里云MaxCompute-Hive UDF(Java)迁移上云实践
阿里云MaxCompute-Hive UDF(Java)迁移上云实践
|
SQL 资源调度 大数据
大数据平台 CDP 中如何配置 hive 作业的 YARN 队列以确保SLA?
大数据平台 CDP 中如何配置 hive 作业的 YARN 队列以确保SLA?
|
SQL 分布式计算 Hadoop
Hive3新特性 1
Hive3新特性
244 0
|
SQL 存储 缓存
《CDP企业数据云平台从入门到实践》——Hive3 新特性 (1)
《CDP企业数据云平台从入门到实践》——Hive3 新特性 (1)
209 0
|
SQL 存储 分布式计算
《CDP企业数据云平台从入门到实践》——Hive3 新特性 (2)
《CDP企业数据云平台从入门到实践》——Hive3 新特性 (2)
151 0
|
SQL 分布式计算 Java
《CDP企业数据云平台从入门到实践》——Hive3 新特性 (3)
《CDP企业数据云平台从入门到实践》——Hive3 新特性 (3)
164 0
|
SQL HIVE
《CDP企业数据云平台从入门到实践》——Hive3 新特性 (4)
《CDP企业数据云平台从入门到实践》——Hive3 新特性 (4)
142 0