2015-03-04 2 views
2

Хорошо, я пару дней общался с этой проблемой, и это заводило меня с ума. Мне нужно использовать базу данных Hive с транзакциями для выполнения операций «update» и «delete».Схватки транзакций сваливаются

Я установил Hadoop и Hive на своей машине в псевдораспределенном режиме. Я пошел за этим tutorial для установки. Я использую Java 1.8.0_31, Hadoop 2.6.0, Hive 1.0.0, и были также несколько деталей, которые я изменил, но они не должны быть релевантными.

Теперь, чтобы начать свое окружение (после перезагрузки, например), я запускаю следующее:

start-dfs.sh 
start-yarn.sh 
java -jar /usr/local/derby/lib/derbyrun.jar server start & 
hive 

И все, кажется, работает хорошо. Хотя в учебнике не упоминается начало дерби, если я его не запускаю, метастор недоступен (что кажется логичным), и улей не запускается.

Отсюда я могу создавать таблицы, показывать таблицы, подключаться к моему клиенту JDBC и т. Д. И т. Д., Все отлично работает. Теперь мне нужно включить транзакции. После этого link и это link я получаю следующую команду:

hive --hiveconf hive.root.logger=info,console 
    --hiveconf hive.txn.manager=org.apache.hadoop.hive.ql.lockmgr.DbTxnManager 
    --hiveconf hive.compactor.initiator.on=true 
    --hiveconf hive.compactor.worker.threads=1 
    --hiveconf hive.txn.driver=jdbc:derby://localhost:1527/metastore_db;create=true 

Sidenote: Я меняющаяся команду, а не улья site.xml только потому, что легче переключаться между командами при попытке что работает и что Безразлично работаем вместо многократного изменения XML-файла.

Я также попытался сменить URL-адрес драйвера на jdbc:derby://localhost:1527/metastore_db;create=true;user=APP;password=mine на всякий случай, если это необходимо, но никаких изменений нет. Когда я выдаю команду (как show tables), я получаю сообщение об ошибке:

15/03/04 23:26:17 [main]: ERROR metastore.RetryingHMSHandler: 
    MetaException(message:Unable to select from transaction database, 
    java.sql.SQLSyntaxErrorException: Table/View 'TXNS' does not exist. 

Согласно this и один из previous links, похоже, свойство hive.in.test должно быть установлено в true. Итак, моя команда запуска становится:

hive --hiveconf hive.root.logger=info,console 
    --hiveconf hive.in.test=true 
    --hiveconf hive.txn.manager=org.apache.hadoop.hive.ql.lockmgr.DbTxnManager 
    --hiveconf hive.compactor.initiator.on=true 
    --hiveconf hive.compactor.worker.threads=1 
    --hiveconf hive.txn.driver=jdbc:derby://localhost:1527/metastore_db;create=true; 

С помощью этой команды я получаю новую ошибку:

ERROR metastore.RetryingHMSHandler: java.lang.NullPointerException 
    at org.apache.hadoop.hive.metastore.txn.TxnHandler.checkQFileTestHack(TxnHandler.java:1146) 

И эта ошибка не существует нигде, я чувствую, что я единственный человек, на Интернет с ним. Во всяком случае, так как я не мог найти какое-либо решение, я вырыл в исходный код:

private void checkQFileTestHack() { 
    boolean hackOn = HiveConf.getBoolVar(conf, HiveConf.ConfVars.HIVE_IN_TEST) || 
    HiveConf.getBoolVar(conf, HiveConf.ConfVars.HIVE_IN_TEZ_TEST); 

    LOG.info("Before if"); 
    if (hackOn) { 
     LOG.info("Hacking in canned values for transaction manager"); 
     // Set up the transaction/locking db in the derby metastore 
     TxnDbUtil.setConfValues(conf); 
     try { 
      TxnDbUtil.prepDb(); 
     } catch (Exception e) { 
      // We may have already created the tables and thus don't need to redo it. 
      if (!e.getMessage().contains("already exists")) { 
       throw new RuntimeException("Unable to set up transaction database for" + 
       " testing: " + e.getMessage()); 
      } 
     } 
    } 
} 

Линия 1146 является if (!e.getMessage().contains("already exists")) линия, которая, кажется, не имеет особого смысла, если «е» не является пустым, что странно. Во всяком случае, я думал, что могу отладить это дальше, добавив еще несколько сообщений о регистрации, создав проект и заменив оригинальный метастарм (который является там, где этот класс TxnHandler), который был изменен мной. Для этого я загрузил исходный код и последовал за this, чтобы его создать. Я пробовал maven2, и это не сработало, потому что какой-то плагин работал только с maven3, поэтому я получил maven3 от here и построил проект.

Если я построю его с помощью команды mvn clean install -Phadoop-2,dist, это не только навсегда, но и на этапе тестирования. Потому что это не сбой в метасторе (на метасторе, он пропускает 1 тест, я не уверен, что это должно произойти), я думал, что могу просто построить его без тестирования.Таким образом, мы получаем следующее:

mvn clean install -DskipTests -Phadoop-2,dist 
rm /usr/local/hive/lib/hive-metastore-1.0.0.jar 
cp packaging/target/apache-hive-1.0.0-bin/apache-hive-1.0.0-bin/lib/hive-metastore-1.0.0.jar /usr/local/hive/lib/ 

Sidenote: в интересах времени, я также попробовал -pl metastore -am аргументы, но в то время как специалист говорит, что metastore был построен, фляга в Lib папки не изменяется, так Я предполагаю, что я делаю что-то неправильно.

В любом случае, это должно построить мою модифицированную банку, заменить ее в улье и, когда я снова начну улей, она должна загрузить мою. Однако даже после того, как я меняю код, ошибка все еще показывает то же самое, моя новая информация о регистрации не зарегистрирована, даже строка ошибки остается неизменной. Как будто я ничего не изменил в своей новой банке.

Его странный, я знаю, что maven компилирует мой код, потому что он распознает ошибки компиляции, и я могу видеть на свойствах jar, что это новый файл, так почему бы не изменить остальные мои изменения? Hive распознает, когда я удаляю оригинальную банку, но когда я заменяю ее своей модифицированной версией, ее вроде я ничего не менял.

В любом случае, как вы можете видеть, у меня было много неприятностей, и я попытался исправить большинство из них. Но теперь я застрял в этом, не имея возможности использовать чертову команду «удалить», потому что я не могу разрешать транзакции. Может кто-то указать мне верное направление? Tyvm!

... и извините за длинный пост.

ответ

1

Я следовал за Srinivas advice, и ошибка исчезла. Мне больше не нужно, чтобы свойство «hive.in.test» было установлено как «true», и все работает нормально.

Я все еще не знаю, почему изменение источника не повлияет на остальную часть программы улья, но у меня есть транзакции.

Edit: в случае, если связь идет вниз, вот цитата:

After extracting Hive version, you have to create Hive meta store

sudo apt-get install mysql-server 
sudo service mysql start 
sudo apt-get install libmysql-java 
ln -s /usr/share/java/libmysql-java.jar /usr/lib/hive/lib/libmysql-java.jar 
sudo chkconfig mysql on 

mysql -u root -p 
Enter password: 
mysql> CREATE DATABASE metastore; 
mysql> USE metastore; 
mysql> SOURCE /usr/lib/hive/scripts/metastore/upgrade/mysql/hive-schema-0.12.0.mysql.sql; 

mysql> CREATE USER 'hive'@'metastorehost' IDENTIFIED BY 'mypassword'; 
... 
mysql> REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'hive'@'metastorehost'; 
mysql> GRANT SELECT,INSERT,UPDATE,DELETE,LOCK TABLES,EXECUTE ON metastore.* TO 'hive'@'metastorehost'; 
mysql> FLUSH PRIVILEGES; 
mysql> quit; 

Then in hive-site.xml, you need set the new parameters like

javax.jdo.option.ConnectionURL - jdbc:mysql://myhost/metastore 
javax.jdo.option.ConnectionDriverName - com.mysql.jdbc.Driver 
javax.jdo.option.ConnectionUserName - hive 
javax.jdo.option.ConnectionPassword - mypassword 
datanucleus.autoCreateSchema - false 
datanucleus.fixedDatastore - true 
datanucleus.autoStartMechanism - SchemaTable 
hive.metastore.uris - thrift://<n.n.n.n>:9083 

hive.support.concurrency – true 
hive.enforce.bucketing – true 
hive.exec.dynamic.partition.mode – nonstrict 
hive.txn.manager – org.apache.hadoop.hive.ql.lockmgr.DbTxnManager 
hive.compactor.initiator.on – true 
hive.compactor.worker.threads – 1 

Then restart Hive-server and Metastore. Now create one normal table and one external table with orc format and load from normal to orc table. Now you can update and delete records.

+0

Можете ли вы сказать мне, что вы сделали на самом деле? Я получаю ** Исключение блокировки: Ошибка связи с метасторе **. – Kumar

+0

Следуйте по ссылке, которую я установил (http://mail-archives.apache.org/mod_mbox/hive-user/201503.mbox/%3CCAM52XzLhK5_qOXLBUL-b42L1RA2LrnLXAqM4gxyUrQCCKSwW4w%40mail.gmail.com%3E). В нем показано, как создать метастабильность улья и настроить улей. – BlueMoon93

 Смежные вопросы

  • Нет связанных вопросов^_^