hive3.0的新特性有许多,比较主要的改变有
- 执行引擎变更为TEZ,不使用MR
- 成熟的ACID大数据事务支持
- LLAP用于妙极,毫秒级查询访问
- 批处理使用TEZ,实时查询使用LLAP
增强的内容如下: - 基于Apache Ranger的统一权限管理(sentry在企业中使用也是比较多的,cdh默认就支持.在cdh高版本中默认切花到ranger上了.主要是sentry使用上的笨重.)
- 默认开启HDFS ACLs(数据安全目前是数仓发展的重要方向)
- Beeline代替Hive Cli,降低启动开销(主要考虑hive cli的使用安全性上,毕竟是可以绕过认证和建权)
- 不再支持内嵌Metastore(3种metastore的部署方案,企业中一般使用远端部署metastore)
Apache TEZ是一个针对Hadoop数据处理应用程序的分布式计算框架,基于Yarn且支持DAG作业的开源计算框架。Tez产生的主要原因是绕开MapReduce所施加的限制,逐步取代MR,提供更高的性能和灵活性。
Apache TEZ的核心思想是将Map和Reduce拆分成若干子过程,即Map被拆分成Input、Processor、Sort、Merge和Output, Reduce被拆分成Input、Shuffle、Sort、Merge、Processor和Output等,分解后可以灵活组合成一个大的DAG作业。
Apache TEZ兼容MR任务,不需要代码层面的改动。
Apache TEZ提供了较低级别的抽象,为了增强Hive/Pig的底层实现,而不是最终面向用户的。
LLAP(Live Long and Process)实时长期处理,是Hive3的一种查询模式,由一个守护进程和一个基于DAG的框架组成,LLAP不是执行引擎(MR/Tez),它用来保证Hive的可伸缩性和多功能性,增强现有的执行引擎。
LLAP的守护进程长期存在且与DataNode直接交互,缓存,预读取,某些查询处理和访问控制功能包含在这个守护程序中用于直接处理小的查询,而计算与IO较大的繁重任务会提交Yarn执行。守护程序不是必须的,没有它Hive仍能正常工作。对LLAP节点的请求都包含元数据信息和数据位置,所以LLAP节点无状态。
可以使用Hive on Tez use LLAP来加速OLAP场景(OnLine Analytical Processing联机分析处理)
LLAP为了避免JVM内存设置的限制,使用堆外内存缓存数据以及处理GROUP BY/JOIN等操作,而守护程序仅使用少量内存。
Hive3支持两种查询模式Container和LLAP
hive3.0就支持ACID, 但是只有ORC的存储格式数据才能进行修改和删除操作。比如PARQUET只是拥有了ACID特性,但同样不能进行更新删除的操作。
SPARK2.3 也不支持更新删除的操作,但是HIVE表结构变更后再不需要手动REFLASH刷新SPARK的缓存数据了。
APACHE SPARK2.4.2 开始支持ACID数据的更新删除操作,数据源需要是基于PARQUET格式的DELTA LAKE数据(Databricks开源),传统的PARQUET数据可以很容易转换为DELTA LAKE的数据。