设为首页 加入收藏

TOP

hive事务管理
2018-11-29 02:04:36 】 浏览:89
Tags:hive 事务管理

事务包含四要素:

  • 原子性(Atomicity):一个事务是一个不可再分割的工作单位,事务中的所有操作要么都发生,要么都不发生。

  • 一致性(Consistency):事务开始之前和事务结束以后,数据库的完整性约束没有被破坏。这是说数据库事务不能破坏关系数据的完整性以及业务逻辑上的一致性。

  • 隔离性(Isolation):多个事务并发访问,事务之间是隔离的,一个事务不影响其它事务运行效果。这指的是在并发环境中,当不同的事务同时操作相同的数据时,每个事务都有各自完整的数据空间。事务查看数据更新时,数据所处的状态要么是另一事务修改它之前的状态,要么是另一事务修改后的状态,事务不会查看到中间状态的数据。

    事务之间的相应影响,分别为:脏读、不可重复读、幻读、丢失更新。

  • 持久性(Durability):意味着在事务完成以后,该事务锁对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。

事务可以保证ACID原则的操作,解决ACID问题的两大技术点是:

  • 预写日志(Write-ahead logging)保证原子性和持久性

  • 锁(locking)保证隔离性


CDH Hive中的concurrency默认是开启的,hive定义了两种锁的模式:共享锁(S)和排它锁(X),顾名思义,多个共享锁(S)可以同时获取,但是排它锁(X)会阻塞其它所有锁。
读请求和select查询语句使用共享锁,写语句使用排它锁。排它锁和共享锁,排它锁和排它锁不能并存,共享锁和共享锁可以并存。
使用show locks命令在Hive中查看正在使用哪种锁,我的环境是CDH5.8.5,hive是1.2.0版本,默认开启了锁。可以对同一张表使用insert into 和select等语句进行测试。

但是如果要是用update或者delete对数据库表进行事务操作的话,需要在hive-site.xml中添加以下配置,有的可能配置已经存在

<property>
<name>hive.support.concurrency</name>
<value>true</value>
</property>
<property>
<name>hive.enforce.bucketing</name>
<value>true</value>
</property>
<property>
<name>hive.exec.dynamic.partition.mode</name>
<value>nonstrict</value>
</property>
<property>
<name>hive.txn.manager</name>
<value>org.apache.hadoop.hive.ql.lockmgr.DbTxnManager</value>
</property>
<property>
<name>hive.compactor.initiator.on</name>
<value>true</value>
</property>
<property>
<name>hive.compactor.worker.threads</name>
<value>1</value>
</property>
<property>
<name>hive.lock.sleep.between.retries</name>
<value>10</value>
</property>

如果要在beeline中实现事务操作,还需要配置hive-site.xml的HIveserver2高级代码段,配置项同上。

其中,hive.lock.sleep.between.retries项可以使用默认,该项表示一个操作从另一个操作拿到锁的时间间隔,默认是60s


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇使用java连接hive,并执行hive语.. 下一篇HIVE与mysql的关系 hive常用命令..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目