hive事务讲解
hive0.14版本之后,开始支持事务。hive中事务的引入,使Hive支持行级别的ACID,读操作与写操作不会冲突。
hive事务的限制条件
1.在现在的版本中,只支持ORC文件格式。
2.默认情况下,hive的事务性是关闭的,开启需要设置transactional=true。
3.表必须是Bucket表。
4.外部表不能成为ACID表,因为外部表的变化,不能被Compact控制。
5.不能从一个非ACID会话向ACID表中读写数据。这意味着Hive事务管理必须设置成org.apache.hadoop.hive.ql.lockmgr.DbTxnManager
6.目前只支持快照级别的隔离,不支持脏读,重复读等。
7.存在的Zookeeper和内存锁管理机制与事务是不兼容的
Hive事务的开启步骤
set hive.support.concurrency=true;
set hive.enforce.bucketing=true;
set hive.exec.dynamic.partition.mode=nonstrict;
set hive.txn.manager=org.apache.hadoop.hive.ql.lockmgr.DbTxnManager;
Hive支持CRUD原理:
Hive的ORC格式文件,有base files和delta files。
base files是基础文件,delta files是增删改操作生成的新文件。
当进行ACID操作的时候,base files 和 delta files会发生变化,
满足一定条件后,这两类文件会进行合并,产生新的base files。
文件的合并