【问题标题】:Hive Transactions + Remote Metastore ErrorHive 事务 + 远程元存储错误
【发布时间】:2017-05-26 15:56:18
【问题描述】:

我在 EMR 5.5.0 上使用远程 mysql 元存储数据库运行 Hive 2.1.1。我需要在 hive 上启用事务,但是当我按照配置 here 并运行任何查询时,我收到以下错误

失败:获取锁时出错:与元存储通信时出错

元存储上的设置:

hive.compactor.worker.threads = 0
hive.compactor.initiator.on = true

hive 客户端中的设置:

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 元存储肯定是在线的。

我已经尝试了一些旧的建议来启用 Hive 测试功能,但这些建议不起作用,但我认为这不再是一个测试功能了。我不能像 SO 中的类似帖子所建议的那样关闭并发,因为我需要并发。问题似乎是 DbTxnManager 没有从配置单元配置中正确获取远程元存储连接信息,或者 mysqldb 缺少 DbTxnManager 所需的一些表。我有datanucleus.autoCreateTables=true

【问题讨论】:

  • 我能找到的唯一实现 HiveTxnManager 的类是 DbTxnManager,它不适合我。我有一个替代方案,那就是编写一个自定义事务管理器,但这并不理想。

标签: hadoop hive


【解决方案1】:

看起来 hive 没有正确创建事务管理器所需的表。我不确定它从哪里得到它的架构,但它肯定是错误的。

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

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

【讨论】:

  • 原来这是一个糟糕的计划。手动更改架构确实有效,但是一旦您为 hive 运行任何架构迁移脚本以进行版本更改,这些手动创建的表将不会被考虑在内。正确的方法是弄清楚 hive 在确定它是否会添加事务表并让 hive 处理创建模式时查看的设置
【解决方案2】:

错误来自 失败:获取锁时出错:与元存储通信时出错

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-02
    • 2010-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-02
    相关资源
    最近更新 更多