【问题标题】:Hive: acquire explicit exclusive lockHive:获取显式排他锁
【发布时间】:2015-10-27 13:32:30
【问题描述】:

配置(hortonworks)

  • hive:构建 hive-1.2.1.2.3.0.0
  • Hadoop 2.7.1.2.3.0.0-2557

我正在尝试执行

lock table event_metadata EXCLUSIVE;

蜂巢响应:

处理语句时出错:FAILED:执行错误,从 org.apache.hadoop.hive.ql.exec.DDLTask 返回代码 1。当前事务管理器不支持显式锁定请求。事务管理器:org.apache.hadoop.hive.ql.lockmgr.DbTxnManager

在代码中有明显的地方禁用了显式锁: http://grepcode.com/file/repo1.maven.org/maven2/org.apache.hive/hive-exec/1.2.0/org/apache/hadoop/hive/ql/lockmgr/DbTxnManager.java#DbTxnManager

321  @Override
322  public boolean supportsExplicitLock() {
323    return false;
324  }

问题:

如何使显式锁定起作用?它们出现在哪个版本的蜂巢中?

这是一个示例 http://www.ericlin.me/how-table-locking-works-in-hive 用于 cloudera 显式锁定工作。

【问题讨论】:

    标签: hive locking hortonworks-data-platform


    【解决方案1】:

    您可以即时设置并发参数:

     set hive.support.concurrency=true;
    

    之后你可以尝试执行你的命令

    【讨论】:

    • 请同时设置以下参数“set hive.txn.manager=org.apache.hadoop.hive.ql.lockmgr.DummyTxnManager;”
    【解决方案2】:

    Hive 包含一个 locking 功能,该功能将 Apache Zookeeper 用于 lockingZookeeper 实现高度可靠的分布式协调。除了一些额外的设置和配置步骤之外,ZookeeperHive 用户不可见

    $HIVE_HOME/hive-site.xml 文件中,设置以下属性:

    <property>
        <name>hive.zookeeper.quorum</name>
        <value>zk1.site.pvt,zk1.site.pvt,zk1.site.pvt</value> 
        <description>The list of zookeeper servers to talk to. 
                     This is only needed for read/write locks.
       </description>
    </property>
    
    <property>
        <name>hive.support.concurrency</name>
        <value>true</value>
        <description>Whether Hive supports concurrency or not.
        A Zookeeper instance must be up and running for the default Hive lock manager to support read-write locks.</description>
    </property>
    

    重启后hive,运行命令

    hive> lock table event_metadata EXCLUSIVE;
    

    参考:编程 Hive,O'REILLY

    编辑:

    DummyTxnManager.java,提供默认 Hive 行为,具有

    @Override
      public boolean supportsExplicitLock() {
        return true;
      }
    

    DummyTxnManager 复制 pre Hive-0.13 behavior 不支持 transactions

    在哪里

    DbTxnManager.java,将 transactions 存储在 metastore database 中,具有:

    @Override
      public boolean supportsExplicitLock() {
        return false;
      }
    

    【讨论】:

    • 感谢您的回答。不幸的是,我已经在 hive-site.xml 中有所有配置
    • DummyTxnManager,提供默认行为,有@Override public boolean supportsExplicitLock() { return true; }github.com/apache/hive/blob/…
    • 顺便说一句,我已经在我的 cloudera VM 上进行了同样的测试。排他锁工作正常。 Hive version - Hive 1.1.0-cdh5.4.2
    • Vinkal,据我了解,DummyTxManager 无法处理事务。这可能会导致其他一些问题。我对吗?你会和 Dummy 核对吗?
    • DummyTxnManager 不支持事务。它复制了pre Hive-0.13 behavior。我们确定 zookeeper 在您的设置上工作正常吗? lock 在我的 cloudera 机器上运行良好,其中 zookeeper 已启动并运行。请注意,我尚未测试 DummyTxnManager。
    【解决方案3】:

    尝试以下方法:

    设置 hive.txn.manager=org.apache.hadoop.hive.ql.lockmgr.DummyTxnManager;

    解锁表表名;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-05-16
      • 1970-01-01
      • 1970-01-01
      • 2015-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多