Hive: получить явную эксклюзивную блокировку

Конфигурация (hortonworks)

  • куст: ПОСТРОИТЬ куст-1.2.1.2.3.0.0
  • Хадуп 2.7.1.2.3.0.0-2557

я пытаюсь выполнить

lock table event_metadata EXCLUSIVE;

Ответ улья:

Ошибка при обработке оператора: FAILED: ошибка выполнения, код возврата 1 из org.apache.hadoop.hive.ql.exec.DDLTask. Текущий диспетчер транзакций не поддерживает явные запросы на блокировку. Менеджер транзакций: 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, в котором работают явные блокировки.


person Natalia    schedule 27.10.2015    source источник


Ответы (3)


Вы можете установить параметр concurrency на лету:

 set hive.support.concurrency=true;

После этого вы можете попробовать выполнить свою команду

person Rahul    schedule 20.04.2018
comment
Пожалуйста, установите следующий параметр: set hive.txn.manager=org.apache.hadoop.hive.ql.lockmgr.DummyTxnManager; - person Rahul; 20.04.2018

Hive включает функцию locking, которая использует Apache Zookeeper для locking. Zookeeper реализует высоконадежную распределенную координацию. За исключением некоторых дополнительных действий по установке и настройке, Zookeeper невидим для пользователей Hive.

В файле $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;

Ссылка: Programming 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;
  }
person Vinkal    schedule 27.10.2015
comment
Спасибо за ответ. К сожалению, все эти конфиги у меня уже есть в hive-site.xml - person Natalia; 27.10.2015
comment
DummyTxnManager, обеспечивающий поведение по умолчанию, имеет @Override public boolean supportsExplicitLock() { return true; } github.com/apache/hive/blob/ - person Vinkal; 27.10.2015
comment
Кстати, я проверил то же самое на своей виртуальной машине Cloudera. эксклюзивный замок работает нормально. Hive version - Hive 1.1.0-cdh5.4.2 - person Vinkal; 27.10.2015
comment
Винкал, как я понял, у DummyTxManager нет работы с транзакциями. Это может вызвать некоторые другие проблемы. Я прав? Вы проверяете у Дамми? - person Natalia; 27.10.2015
comment
DummyTxnManager не поддерживает транзакции. он копирует pre Hive-0.13 behavior. Мы уверены, что zookeeper нормально работает на вашей установке? lock отлично работает на моей машине cloudera, где запущен и работает zookeeper. Пожалуйста, обратите внимание, что я не тестировал DummyTxnManager. - person Vinkal; 27.10.2015
comment
мы используем zookeeper для других целей. Все хорошо. И я думаю, если это не работает, исключение должно быть другим. - person Natalia; 27.10.2015
comment
Вы пытались сделать явную блокировку с помощью Dummy или Db TxnManager? - person Natalia; 27.10.2015
comment
Я попытался сделать явную блокировку с помощью DbTxnManager на машине Cloudera. Я упомянул DummyTxnManager, чтобы показать разницу в методе supportsExplicitLock(). - person Vinkal; 27.10.2015
comment
Давайте продолжим обсуждение в чате. - person Natalia; 27.10.2015

Попробуйте следующее:

установить hive.txn.manager=org.apache.hadoop.hive.ql.lockmgr.DummyTxnManager;

разблокировать таблицу tablename;

person Arani Majumder    schedule 19.03.2021