Hive支持行级update、delete时遇到的问题
Hive从0.14版本开始支持事务和行级更新,但缺省是不支持的,需要一些附加的配置。要想支持行级insert、update、delete,需要配置Hive支持事务。(行级的insert好像不配置也能运行)
1、修改hive-site.xml,添加如下语句:
<property>
<name>hive.support.concurrency</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>
2、修改hive-site.xml 后,执行更新语句,报错 FAILED: Error in acquiring locks: Error communicating with the metastore
网上查找,说要添加Hive元数据
INSERT INTO NEXT_LOCK_ID VALUES(1);
INSERT INTO NEXT_COMPACTION_QUEUE_ID VALUES(1);
INSERT INTO NEXT_TXN_ID VALUES(1);
COMMIT;
但是mysql中以上三个表根本不存在。傻傻的手动在mysql建了这三个表,列名都取为id。还是报错。看来只能从源头查找为什么hive自己没有建立这几个表。
3、在mysql服务器上用wireshark抓包 ,发现是在执行sql语句时出的错误。再看出错时对应的sql语句,是在操作HIVE_LOCKS表,显示这个表也未创建。所以没有建立的表不止上面三个。
4、hive相关的表(schema)都应该是不存在时自动创建才对,百度之。找到hive创建schema的脚本是scripts/metastore/upgrade/mysql/hive-schema-2.1.0.mysql.sql。
但是这个脚本文件中并没有找到HIVE_LOCKS表的创建语句,在该目录下grep HIVE_LOCKS ./ -R,发现创建的语句写在hive-txn-schema-2.1.0.mysql.sql。
5、查看hive-schema-2.1.0.mysql.sql文件,发现是通过"SOURCE hive-txn-schema-2.1.0.mysql.sq"来加入执行的。网查说是hive元数据库没有初始化。可以通过
schematool -dbType mysql -initSchema
来初始化所有schema,执行以上语句后,有报错,表还是没创建。于是手动执行
hive -f hive-txn-schema-2.1.0.mysql.sql
相应的表创建成功之后,再测试就可以了。(将hive-site.xml中的元数据库换了一个,重新新建了一个mysql元数据库,在执行 schematool -dbType mysql -initSchema 时竟然没有报错,那些表也都有了)
现在遗留的问题:
1. hive-schema-2.1.0.mysql.sql中SOURCE为什么没生效?
网上说是没有绝对路径当然找不到无法执行(如果试图手动改成绝对路径重新执行的话,因为其他的sql语句里有一些insert,就会报一些Duplicate key name,Duplicate entry等错误...而且txn那个文件里建表不检查是否exists,多执行几遍又会报表已经存在错误..
使用schemetool就可以避免这些麻烦,而且很明确的知道是否初始化成功.)...。
可是配置里不带绝对路径肯定是通常情况都可以执行的啊
2. 执行hive -f hive-txn-schema-2.1.0.mysql.sql时,为什么表就建立在mysql中了,而不是hive本地文件系统 。
3、 schematool -dbType mysql -initSchema 这个到底干了嘛?
参考:
http://www.bubuko.com/infodetail-1834078.html
http://blog.csdn.net/wzy0623/article/details/51483674
http://blog.csdn.net/zxc2zxc120/article/details/40543589
新问题:
hive (zqhdb)> delete from id_test where id=4;
FAILED: SemanticException [Error 10297]: Attempt to do update or delete on table zqhdb.id_test that does not use an AcidOutputFormat or is not bucketed
Hive支持行级update、delete时遇到的问题的更多相关文章
- Hive扩展功能(九)--Hive的行级更新操作(Update)
软件环境: linux系统: CentOS6.7 Hadoop版本: 2.6.5 zookeeper版本: 3.4.8 主机配置: 一共m1, m2, m3这三部机, 每部主机的用户名都为centos ...
- INSERT,UPDATE,DELETE时不写日志
我们在维护数据库的过程中,可能会遇到海量数据的存储和维护,但在有的情况下,需要先试验,然后再对实际的数据进行操作,那么在试验这个过程中,我们是不需要写日志的,因为当你对海量数据操作时,产生的日志可能会 ...
- [Hive - LanguageManual] DML: Load, Insert, Update, Delete
LanguageManual DML Hive Data Manipulation Language Hive Data Manipulation Language Loading files int ...
- [数据库事务与锁]详解五: MySQL中的行级锁,表级锁,页级锁
注明: 本文转载自http://www.hollischuang.com/archives/914 在计算机科学中,锁是在执行多线程时用于强行限制资源访问的同步机制,即用于在并发控制中保证对互斥要求的 ...
- 第十篇 SQL Server安全行级安全
本篇文章是SQL Server安全系列的第十篇,详细内容请参考原文. 不像一些其他industrial-strength数据库服务,SQL Server缺乏一个内置保护个别数据记录的机制,称为行级安全 ...
- MySQL行级锁,表级锁,页级锁详解
页级:引擎 BDB. 表级:引擎 MyISAM , 理解为锁住整个表,可以同时读,写不行 行级:引擎 INNODB , 单独的一行记录加锁 表级,直接锁定整张表,在你锁定期间,其它进程无法对该表进行写 ...
- MySQL行级锁、表级锁、页级锁详细介绍
原文链接:http://www.jb51.net/article/50047.htm 页级:引擎 BDB.表级:引擎 MyISAM , 理解为锁住整个表,可以同时读,写不行行级:引擎 INNODB , ...
- MySQL学习笔记(五):MySQL表级锁和行级锁
一:概述 相对其他数据库而言,MySQL的锁机制比较简单,其最显著的特点是不同的存储引擎支持不同的锁机制.比如,MyISAM和MEMORY存储引擎采用的是表级锁(table-level locking ...
- 【数据库】数据库的锁机制,MySQL中的行级锁,表级锁,页级锁
转载:http://www.hollischuang.com/archives/914 数据库的读现象浅析中介绍过,在并发访问情况下,可能会出现脏读.不可重复读和幻读等读现象,为了应对这些问题,主流数 ...
随机推荐
- mysql 表名区分大小写
原来Linux下的MySQL默认是区分表名大小写的,通过如下设置,可以让MySQL不区分表名大小写:1.用root登录,修改 /etc/my.cnf:2.在[mysqld]节点下,加入一行: lowe ...
- UVa 247 - Calling Circles(Floyd求有向图的传递闭包)
链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- Spark Streamming 基本输入流(二) :Socket
Spark Streamming 可以通过socket 进行数据监听. socket的输入方可以通过nc 或者自己开发nc功能的程序. 1.系统自带的nc su root a yum install ...
- git fetch 和 git pull 的区别
Git中从远程的分支获取最新的版本到本地有这样2个命令: 1. git fetch:相当于是从远程获取最新版本到本地,不会自动merge git fetch origin master git log ...
- js 获取网页宽/高度
网页可见区域宽度: document.body.clientWidth 网页可见区域高度: document.body.clientHeight 网页可见区域宽度: document.body.off ...
- Memcache随笔
Tip01: Memcache 中记录的缓存如果你设置了失效时间,之后如果你在系统时间中将时间修改为超过失效时间,再次访问之前你设置的资源,Memcache 会认为你设置的缓存已失效: Tip02: ...
- oracle 12如何解锁账户锁定状态及修改忘记的密码
有两种方法,大同小异吧,感觉命令真是个好东西,哈哈哈哈,挽救了我安了4次才安好的oracle!!! 方法一: 1.如果忘记密码,找到忘记密码的是哪个用户身份,如果用户被锁定,可以使用下面说的方法解除锁 ...
- vue+element-ui中的图片获取与上传
vue+element-ui中的图片获取与上传 工作上接触了一下图片的处理,图片的格式是文件流, 记录如下. 请求图片 请求图片的时候,带上{ responseType: 'blob' }, 否则图片 ...
- QT 防止FTP 上传软件在断连处 Crash
前段时间发现项目中的上传FTP软件有可能会在从服务器申请断连时Crash, 所以加了一个Timer. 由于项目代码行数过大, 此处上传部分代码片段. timeoutTimer = new QTimer ...
- (Oracle)自定义调用AWR&ADDM
Oracle->自定义调用AWR&ADDM 需求描述: 前面设定每天自动生成AWR用于提供前一天的数据库状态信息,但因数据库和信息过多不利于直观检查.此次新增ADDM诊断. ADDM诊断 ...