Hive事务

本文详细介绍了数据库事务的概念,包括ACID属性及其实现原理,探讨了事务并发问题如脏读、不可重复读和幻读。此外,深入解析了Hive事务的特点,应用场景及限制条件,帮助读者理解如何在大数据环境中有效利用事务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 事务

      事务就是一组单元化操作,这些操作要么都执行,要么都不执行,是一个不可分割的工作单位。

1.1 事务的基本要素(ACID)

(1)原子性(Atomicity)
      事务开始后,一个事务是一个不可再分割的工作单位,事务中的所有操作要么都发生,要么都不发生。事务执行过程中出错,会回滚到事务开始前的状态。
(2)一致性(Consistency)
      事务开始之前和事务结束以后,数据库的完整性约束没有被破坏。这是说数据库事务不能破坏关系数据的完整性以及业务逻辑上的一致性。比如A向B转账,不可能A扣了钱,B却没收到。
(3)隔离性(Isolation)
      同一时间,只允许一个事务请求同一数据,不同的事务之间彼此没有任何干扰。比如A正在从一张银行卡中取钱,在A取钱的过程结束前,B不能向这张卡转账。
(4)持久性(Durability)
      事务完成后,事务对数据库的所有更新将被保存到数据库,不能回滚。

1.2 事务的并发问题

(1)脏读
      事务A读取了事务B更新的数据,然后B回滚操作,那么A读取到的数据是脏数据。
(2)不可重复读
      事务A多次读同一数据,事务B在事务A多次读取的过程中,对数据做了更新并提交,导致事务A多次读取同一数据时,结果不一致。
(3)幻读
      系统管理员A将数据库中所有学生的成绩从具体分数改为ABCD等级,但是系统管理员B就在这个时候插入了一条具体分数的记录,当系统管理员A改结束后发现还有一条记录没有改过来,就好像发生了幻觉一样,这就叫幻读。
      小结:不可重复读和幻读很容易混淆,不可重复读侧重于修改,幻读侧重于新增或删除。解决不可重复读的问题只需锁住满足条件的行,解决幻读需要锁表。

1.3 ACID的实现原理

(1)预写日志(Write-ahead logging)保证原子性和持久性。(在进行操作时,都要先将操作写入日志,日志写完之后,再执行操作)
(2)锁(locking)保证隔离性
      这里并没有提到一致性,是因为一致性是应用相关的话题,它的定义一个由业务系统来定义,什么样的状态才是一致?而实现一致性的代码通常在业务逻辑的代码中得以体现。
      :锁是指在并发环境中通过读写锁来保证操作的互斥性。根据隔离程度不同,锁的运用也不同。

2 Hive的事务

2.1 Hive事务应用场景

(1)流数据的采集。许多用户使用如Apache Flume、Apache Storm或Apache Kafka等工具,将数据流到自己的Hadoop集群。这些工具都是每秒百万行级的数据写入,而Hive只能每十五分钟到一个小时添加一次分区。快速的增加分区会对表中的分区数量形成压力。当然可以事先创建好分区再将数据导入,但这样会引起脏读,而且目录下生成的小文件会对NameNode造成很大的压力。使用此事务功能,将支持此场景,同时保证读操作获得一致的数据视图,并避免过多的文件。
(2)数据更新。从Hive0.14开始,可以通过INSERT,UPDATE和DELETE来更新数据。
(3)使用SQL MERGE语句实现批量更新

2.2 限制条件

(1)BEGIN, COMMIT, ROLLBACK暂时不支持,所有DML操作自动提交。
(2)目前只支持ORC 的文件格式。
(3)默认事务是关闭的,需要设置开启。
(4)要是使用这些特性,表必须是分桶的。
(5)事务管理器必须是org.apache.hadoop.hive.ql.lockmgr.DbTxnManager ,否则事务表无法工作。
(6)目前只支持快照隔离级别。当一个给定的查询启动时,它会提供该数据的一致快照。不支持脏读(READ UNCIMMITTED)、提交读(READ COMMITTED)、可重复读(REPEATABLE READ)或可序列化(SERIALIZABLE)。引入BEGIN的目的是在事务持续时间内支持快照隔离,而不仅仅是一个查询。根据用户请求,还可以添加其他隔离级别。
(7)LOAD DATA …语句不支持事务性表,直到Hive-16732才能正确执行。

参考文章
[1] https://blog.youkuaiyun.com/weixin_41122339/article/details/81783759
[2] https://www.jianshu.com/p/aa0f0fdd234c
[3] https://www.infoq.cn/article/guide-of-hive-transaction-management

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值