需求背景
需求方需要用Hive来进行一些update操作。以往一般用Parquet这种格式作为Hive的存储格式,查文档得知Parquet不支持
update,orc格式可以支持update。
开始试验
创建测试数据
首先我们在Hive上简单地创建一个表作为测试:
刚开始会有报错:
这是因为有些配置文件需要修改才能支持transaction操作。
在hive-site.xml里面添加如下配置:
Cloudera Manager的话则可以在WebUI上完成。
- 在WebUI上先点击Hive集群。
- 点击配置,然后找到一个叫hive-site.xml 的 HiveServer2 高级配置代码段(安全阀)的tag中
- 将上述配置内容复制在文本框内。
- 重启集群
测试更新数据
测试更新和删除部分数据
这里需要注意的一个地方就是 要更新的字段不能是设置为bucket的那个字段,不然会报错:
成功执行!
踩的一些坑
因为我是用的单节点部署的CDH集群。刚开始,在Hive上执行select count(*) ; 和 insert操作时候,没有任何报错,
但会一直卡在那里。后来查看到cloudera community说单节点要改个mapred-site.xml的一个参数:
mapreduce.framework.name
默认是用的yarn,单机的话要改为local,然后重启集群insert 和 select count(*) 就不会卡住了,
CDH也是在WebUI上的Yarn集群上的配置上修改。
Reference
https://www.cnblogs.com/qifengle-2446/p/6424620.html
https://community.cloudera.com/t5/Batch-SQL-Apache-Hive/Hive-server-query-hanging-when-issue-ing-select-count-on-CLI/m-p/67119#M2662