我是靠谱客的博主 深情宝马,最近开发中收集的这篇文章主要介绍hive-事务支持配置,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一、写在前面

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-事务支持配置所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(60)

评论列表共有 0 条评论

立即
投稿
返回
顶部