Хорошо, я пару дней общался с этой проблемой, и это заводило меня с ума. Мне нужно использовать базу данных 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!
... и извините за длинный пост.
Можете ли вы сказать мне, что вы сделали на самом деле? Я получаю ** Исключение блокировки: Ошибка связи с метасторе **. – Kumar
Следуйте по ссылке, которую я установил (http://mail-archives.apache.org/mod_mbox/hive-user/201503.mbox/%3CCAM52XzLhK5_qOXLBUL-b42L1RA2LrnLXAqM4gxyUrQCCKSwW4w%40mail.gmail.com%3E). В нем показано, как создать метастабильность улья и настроить улей. – BlueMoon93