【发布时间】:2015-04-24 20:25:18
【问题描述】:
在数据库中的任何表上运行选择语句时,HIVE 0.13 将共享锁定整个数据库(我看到像 LOCK-0000000000 这样的节点是 Zookeeper 中数据库节点的子节点)。即使在运行 select 语句时,HIVE 也会在整个架构上创建共享锁 - 这会导致数据库中其他表上的 CREATE/DELETE 语句冻结,直到原始查询完成并释放锁。
有人知道解决这个问题的方法吗?以下链接建议关闭并发性,但我们不能这样做,因为我们要替换整个表,并且我们必须确保在替换整个内容之前没有 select 语句正在访问表。
http://mail-archives.apache.org/mod_mbox/hive-user/201408.mbox/%3C0eba01cfc035$3501e4f0$9f05aed0$@com%3E
use mydatabase;
select count(*) from large_table limit 1; # this table is very large and hive.support.concurrency=true`
在另一个 hive shell 中,同时第一个查询正在执行:
use mydatabase;
create table sometable (id string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' STORED AS TEXTFILE ;
问题是“创建表”在第一个查询(选择)完成之前不会执行。
更新: 我们正在使用 Cloudera 的 Hive CDH-5.2.1-1 分发版,我们看到了这个问题。
【问题讨论】: