首页 > 解决方案 > Hive ACID 表锁死锁永不过期

问题描述

猜测在蜂巢中启用 ACID 是一条孤独的路线。我发现很难找到解决方案。

这个查询也类似于我下面的查询。

Hive 表不响应选择查询。启用酸

错误: FAILED: Error in acquiring locks: Lock acquisition for LockRequest(component:[ LockComponent(type:SHARED_READ, level:TABLE, dbname:db1, tablename:table1, operationType:INSERT, isAcid:true), LockComponent(type:SHARED_READ, level:TABLE, dbname:db1, tablename:table2, operationType:SELECT), LockComponent(type:SHARED_READ, level:TABLE, dbname:db1, tablename:table3, operationType:SELECT)], txnid:10140, user:userid, hostname:host.xyz.com, agentInfo:userid_20190707082237_ff87ff1b-bcc2-466d-b5db-e5781ff1f2ef) timed out after 5503292ms. LockResponse(lockid:22084, state:WAITING)

有几个月的锁存在。即使在重新创建表之后,这些锁仍然存在。这可能是错误的原因。但我不确定。因为有时同样的失败查询也会起作用。它令人困惑。

我使用 R 中的系统命令来运行如下所示的配置单元查询。因此,对于以下设置的每个查询也会执行

acid <- "set hive.support.concurrency=true;
    set hive.txn.manager=org.apache.hadoop.hive.ql.lockmgr.DbTxnManager;
    set hive.enforce.bucketing=true;
    set hive.exec.dynamic.partition.mode=nostrict;
    set hive.compactor.initiator.on=true;
    set hive.compactor.worker.threads=1;"

hql <- paste(acid,hql)
response <- system(paste0("hive -S -e ","\"", hql,"\""," 2>&1"), wait = TRUE,intern=TRUE)

select count(*)对于像我这样使用的少数查询tez,因为查询运行没有问题并且速度更快。并非所有查询都可以使用tez,因为它会产生一些其他错误。

某些Drop table查询会导致锁定超时。但是在Drop table不启用ACID属性的情况下同样可以正常工作。

我想我可以正确解释。我知道这是多个问题。但主要问题是由于锁而无法执行查询。并且也无法杀死锁。

蜂巢版本

Hive 2.1.1-mapr-1803 Subversion git://9281ba475c39/root/opensource/mapr-hive-2.1/dl/mapr-hive-2.1 -r ef09bc4b4286a3f53947196a79949620b006344e Compiled by root on Mon Apr 2 15:49:32 UTC 2018 From source with checksum e47dbe8554cd78b7254c1856508175bd

标签: hiveacid

解决方案


推荐阅读