我在EMR 5.5.0上使用远程mysql Metastore DB运行Hive 2.1.1。我需要在配置单元上启用事务,但是当我按照配置here运行任何查询时,我收到以下错误
失败:获取锁定时出错:与Metastore进行通信时出错
Metastore上的设置:
hive.compactor.worker.threads = 0
hive.compactor.initiator.on = true
配置单元客户端中的设置:
SET hive.support.concurrency=true;
SET hive.enforce.bucketing=true;
SET hive.exec.dynamic.partition.mode=nonstrict;
SET hive.txn.manager=org.apache.hadoop.hive.ql.lockmgr.DbTxnManager;
只有当我设置hive.txn.manager
时才会发生这种情况,所以我的hive Metastore肯定在线。
我已经尝试了一些关于改变hive测试功能的旧建议,但是我不认为这是一个测试功能。我不能像SO中的类似帖子那样关闭并发性,因为我需要并发性。似乎问题是DbTxnManager没有从hive配置正确获取远程Metastore连接信息,或者mysqldb缺少DbTxnManager所需的一些表。我有datanucleus.autoCreateTables=true
。
答案 0 :(得分:1)
看起来hive并没有正确创建事务管理器所需的表。我不确定它的架构在哪里,但这绝对是错误的。
所以我们只是运行hive-txn-schema查询来手动设置架构。从现在开始,我们将在任何群集开始时执行此操作。
答案 1 :(得分:0)
来自的错误 FAILED:获取锁定时出错:与Metastore通信时出错
有时因为它没有任何数据,你需要初始化表中的一些数据。例如下面。
create table t1(id int, name string)
clustered by (id) into 8 buckets
stored as orc TBLPROPERTIES ('transactional'='true');