Hive3新特性

Hive ACID v2

Hive3的ACID v2相比Hive2的ACID v1,对很多事务的特性进行了优化升级,使之更接近于关系型数据库。

使用ACID语义修改现有Hive表数据,包括insert, update, delete, merge

支持数据库四大特性, Atomicity, Consistency, Isolation, Durability

允许在使用长时间运行的分析查询同时进行并发更新。

使用MVCC(Multi-Version concurrency Control)架构。

1.创建ACID事务表

CREATE TABLE acid_crud(id int, value string)
    STORED AS ORC
    TBLPROPERTIES(
        'transactional'='true',
        'transactional_properties'='default');

2.支持合并

Minor compaction 将增量文件合并到较少的增量文件当中

Major compaction 将增量文件与基础数据合并

合并过程可以自动触发或者手动触发

合并不影响读写

3.ACID工具

SHOW COMPACTIONS
SHOW TRANSACTIONS
SHOW LOCKS
ABORT TRANSACTIONS

SQL兼容性

Hive3支持绝大多数的最新的SQL 2016标准。

https://cwiki.apache.org/confluence/display/Hive/Supported+Features:++Apache+Hive+3.1
Hive3新特性(一)

约束和代理键

支持设置默认值

支持设置主键,外键

CREATE TABLE Persons (
    ID Int NOT NULL,
    Name String NOT NULL,
    Age Int,
    Creator String DEFAULT CURRENT_USER(),
    CreateDate Date DEFAULT CURRENT_DATE(),
    PRIMARY KEY (ID) DISABLE NOVALIDATE
);

支持Surrogate keys(代理键)

物化视图

Hive3像主流商用数据库一样支持创建物化视图,允许在不更改SQL的情况下优化工作负载和查询。

CREATE MATERIALIZED VIEW flight_agg
AS
    SELECT dest,origin, ount(*)
    FROM flights
    GROUP BY desc,origin;

执行引擎

Hive3新特性(二)
在Hive3中,Tez完全取代了MapReduce,这张图显示了Hive3的查询流程。
1.Hive编译查询语句
2.Tez执行查询
3.YARN分配资源
4.Hive更新HDFS上的数据
5.Hive返回查询结果给JDBC连接

LLAP负载管理

LLAP(Live Long And Process)功能是在Hive2.0中引入的。LLAP的核心概念是利用常驻进程,来取代之前Hive与HDFS DataNode进行直接交互的方式。轻量查询(低延迟高并发的分析工作负载)会主要由这种常驻进程处理掉,重型查询(耗资源,长时间运行的工作负载)则依然由传统的YARN来调度查询。
Hive3新特性(二)

这张图,显示了LLAP的执行过程。Tez AM协调整个执行过程,查询的初始状态被推送至LLAP,大型的shuffle会在独立的容器进行。

Hive3增强了在多租户场景下的LLAP负载管理,主要通过resource plan的方式进行实现:
1.划分LLAP资源为多个pool,比如bi池和etl池
2.自动映射applications到对应的池
3.可以设置触发条件,实现自动从一个池到另一个池,比如自动把长时间运行的application移动到etl池
4.可以根据需要activate/deactivate这些resource pools

CREATE RESOURCE PLAN my_plan;
CREATE POOL my_plan.bi
WITH ALLOC_FRACTION=70,QUERY_PARALLELISM=4;
CREATE POOL my_plan.etl
WITH ALLOC_FRACTION=30,QUERY_PARALLELISM=10;
CREATE TRIGGER my_plan.slow_query
WHEN execution_time_ms > 60000
DO MOVE TO etl;
ALTER PLAN my_plan SET DEFAULT POOL=bi;
ALTER PLAN my_plan ENABLE ACTIVATE;

统一查询接口

JDBC Connector

支持从任何jdbc数据源读取数据
只支持读
支持自动查询下推

CREATE EXTERNAL TABLE student_jdbc
(
  name string,
  age int,
  gpa double
)
STORED BY 'org.apache.hive.storage.jdbc.JdbcStorageHandler'
TBLPROPERTIES (
    "hive.sql.database.type" = "MYSQL",
    "hive.sql.jdbc.driver" = "com.mysql.jdbc.Driver",
    "hive.sql.jdbc.url" = "jdbc:mysql://localhost/sample",
    "hive.sql.dbcp.username" = "hive",
    "hive.sql.dbcp.password" = "hive",
    "hive.sql.table" = "STUDENT",
    "hive.sql.dbcp.maxActive" = "1"
);

Kafka Connector

可以从Kafka读取实时数据

CREATE EXTERNAL TABLE kafka_table
  (`timestamp` timestamp , `page` string,  `newPage` boolean, 
  added int, deleted bigint, delta double)
  STORED BY 'org.apache.hadoop.hive.kafka.KafkaStorageHandler'
  TBLPROPERTIES
  ("kafka.topic" = "test-topic", "kafka.bootstrap.servers"="localhost:9092");
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值