当在数据库中的任何表上运行select语句时,HIVE 0.13将SHARED锁定整个数据库(我看到像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发行版,我们正在看到这个问题。
答案 0 :(得分:-1)
我认为他们从来没有在Hive 0.13中做到这一点。在执行多个Hive查询时,请验证您的资源管理器并确保您有足够的内存。
如您所知,每个Hive查询都会触发map reduce作业,如果YARN没有足够的资源,它将等到上一个正在运行的作业完成。请从内存的角度来处理您的问题。
一切顺利!!