Hive事务+远程Metastore错误

时间:2017-05-26 15:56:18

标签: hadoop hive

我在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

2 个答案:

答案 0 :(得分:1)

看起来hive并没有正确创建事务管理器所需的表。我不确定它的架构在哪里,但这绝对是错误的。

所以我们只是运行hive-txn-schema查询来手动设置架构。从现在开始,我们将在任何群集开始时执行此操作。

https://github.com/apache/hive/blob/master/metastore/scripts/upgrade/mysql/hive-txn-schema-2.1.0.mysql.sql

答案 1 :(得分:0)

来自的错误 FAILED:获取锁定时出错:与Metastore通信时出错

有时因为它没有任何数据,你需要初始化表中的一些数据。例如下面。

create table t1(id int, name string)     
clustered by (id) into 8 buckets     
stored as orc TBLPROPERTIES ('transactional'='true');