概述
一、写在前面
hive一般是不会支持事务的,因为hive的存储基于hdfs,hdfs的数据是以块为单位的,一次写入多次读取,说明hadoop不希望我们修改或者删除数据的一部分。但是,继0.13.0版本之后,hive开始支持事务处理。如果想要hive支持事务处理,需要进行一些配置,并且有一些限制。
1.1 update delete
1.2 hive本身是不能支持事务处理的(update delete )
1.3 但是我们可以修改属性实现hive的事务操作
①添加在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.in.test</name>
<value>true</value>
</property>
②也可以在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;
SET hive.compactor.initiator.on = true;
SET hive.compactor.worker.threads = 1;
二、建立事务支持的条件
2.1 条件
①建的表必须是桶表,必须分桶,不然会报错。
②把我们之前建表的类型文件如(stored as textfile)改成(stored as orc)
orc:optimized row columnar,优化列模式文件
因为目前只有ORCFileformat支持AcidOutputFormat
③不仅如此建表时必须指定tbl属性参数(‘transactional’ = true)。
这太麻烦了。。。。
2.2 建表实例
(实例是网图,具体出处忘了,侵权立删)
2.3 实操
①建表:注意三点,桶表orc和tbl参数
②delete语句可运行,不会报不是桶表的错。
③ update语句
注意: 无法通过load data向桶表中加载数据,因为orc不支持load 只能通过创建中间过度表使用insert overwrite加载。
最后
以上就是深情宝马为你收集整理的hive-事务支持配置的全部内容,希望文章能够帮你解决hive-事务支持配置所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复