【问题标题】:Hive Locks entire database when running select on one tableHive 在一张表上运行 select 时锁定整个数据库
【发布时间】: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 分发版,我们看到了这个问题。

【问题讨论】:

    标签: hadoop hive


    【解决方案1】:

    我认为他们在 Hive 0.13 中从未这样做过。当您执行多个 Hive 查询时,请验证您的资源管理器并查看您是否有足够的内存。

    如您所知,每个 Hive 查询都会触发一个 map reduce 作业,如果 YARN 没有足够的资源,它会等到前一个正在运行的作业完成。请从记忆的角度来处理您的问题。

    一切顺利!!

    【讨论】:

    • 创建表不会启动 map reduce 作业。这只是针对 Metastore 的行动。自从升级到 Hive 0.13 后,我也遇到了新的锁定问题。抱歉我没有建议,但我很确定这与记忆​​无关。
    • alex,你是如何解决锁定问题的?我们有一个解决方案,但它不干净
    • @alexP_Keaton 如果您有兴趣,这里不是那么干净的解决方案:etl.svbtle.com/removing-database-level-locks-in-hive
    猜你喜欢
    • 1970-01-01
    • 2020-06-04
    • 2021-06-25
    • 2023-03-24
    • 2011-12-12
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 2021-07-11
    相关资源
    最近更新 更多