2015-03-11 8 views
18

Я скачал улей и модифицированный HADOOP_HOME дляВвод пуска - [ERROR] Ошибка инициализации терминала; откатиться к неподдерживаемым

HADOOP_HOME=${bin}/../../usr/local/hadoop 

моего реального пути Hadoop является

/usr/local/hadoop 

в .bashrc я добавил следующий переменный ENV

export HIVE_HOME=/usr/lib/hive/apache-hive-1.1.0-bin 
export PATH=$PATH:$HIVE_HOME/bin 
export CLASSPATH=$CLASSPATH:/usr/local/Hadoop/lib/*:. 
export CLASSPATH=$CLASSPATH:/usr/local/hive/lib/*:. 

затем я попытался запустить куст с помощью bin/hive. Я получил ошибку ниже

Logging initialized using configuration in jar:file:/usr/lib/hive/apache-hive-1.1.0-bin/lib/hive-common-1.1.0.jar!/hive-log4j.properties 
SLF4J: Class path contains multiple SLF4J bindings. 
SLF4J: Found binding in [jar:file:/usr/local/hadoop/share/hadoop/common/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class] 
SLF4J: Found binding in [jar:file:/usr/lib/hive/apache-hive-1.1.0-bin/lib/hive-jdbc-1.1.0-standalone.jar!/org/slf4j/impl/StaticLoggerBinder.class] 
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. 
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory] 
[ERROR] Terminal initialization failed; falling back to unsupported 
java.lang.IncompatibleClassChangeError: Found class jline.Terminal, but interface was expected 
    at jline.TerminalFactory.create(TerminalFactory.java:101) 
    at jline.TerminalFactory.get(TerminalFactory.java:158) 
    at jline.console.ConsoleReader.<init>(ConsoleReader.java:229) 
    at jline.console.ConsoleReader.<init>(ConsoleReader.java:221) 
    at jline.console.ConsoleReader.<init>(ConsoleReader.java:209) 
    at org.apache.hadoop.hive.cli.CliDriver.getConsoleReader(CliDriver.java:773) 
    at org.apache.hadoop.hive.cli.CliDriver.executeDriver(CliDriver.java:715) 
    at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:675) 
    at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:615) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at org.apache.hadoop.util.RunJar.run(RunJar.java:221) 
    at org.apache.hadoop.util.RunJar.main(RunJar.java:136) 

Exception in thread "main" java.lang.IncompatibleClassChangeError: Found class jline.Terminal, but interface was expected 
    at jline.console.ConsoleReader.<init>(ConsoleReader.java:230) 
    at jline.console.ConsoleReader.<init>(ConsoleReader.java:221) 
    at jline.console.ConsoleReader.<init>(ConsoleReader.java:209) 
    at org.apache.hadoop.hive.cli.CliDriver.getConsoleReader(CliDriver.java:773) 
    at org.apache.hadoop.hive.cli.CliDriver.executeDriver(CliDriver.java:715) 
    at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:675) 
    at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:615) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at org.apache.hadoop.util.RunJar.run(RunJar.java:221) 
    at org.apache.hadoop.util.RunJar.main(RunJar.java:136) 

ответ

59

У меня была такая же проблема, и получили его работы по этой ссылке:

https://cwiki.apache.org/confluence/display/Hive/Hive+on+Spark%3A+Getting+Started

  • улей был повышен до Jline2 но jline 0.9x существует в Lib Hadoop ,

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

  1. Удалить jline из Lib каталога Hadoop (это только тянут в транзитивно из зоопарка).
  2. экспорт HADOOP_USER_CLASSPATH_FIRST = истинный
+28

Это сработало для меня, даже не удалив jline jar, только HADOOP_USER_CLASSPATH_FIRST = true сделал трюк – ThinkFloyd

+0

это тоже работало для меня – zhaozhi

+1

Спасибо, но не нужно удалять JAR из хаоса. –

4

Попробуйте удалить один из этого файла

SLF4J: Найдено связывающим в [баночки: файл:/USR/местные/Hadoop/доля/Hadoop/общее/Библиотека/SLF4J -log4j12-1.7.5.jar /org/slf4j/impl/StaticLoggerBinder.class]

SLF4J: Найдено в связывании [баночки: файл: /usr/lib/hive/apache-hive-1.1.0 -bin/lib/hive-jdbc-1.1.0-standalone.jar! /org/slf4j/impl/StaticLoggerBinder.class]

, тогда я думаю, что он будет выбирать только для привязки к одному. так множественного связывания, не будет доступно больше

+0

Все ошибки, связанные с SLF4J, ушли !!! Ваш ответ занял у меня половину пути, но я все еще придерживаюсь java.lang.IncompatibleClassChangeError. Вы хоть представляете, что это такое? – Venkat

1

У меня была такая же проблема с cloudera CDH5.4. Удаление jline-0.9.94.jar из папки пряжи/libs работало для меня.

0

С новой версией Улей (1.2.1), я просто должен был заменить jline-2.12.jar с jline-2.13.jar в установке/Lib папки ,

1

Сделайте это locate jline.

Файл, jline-0.9.94.баночка, находится в 3-х местах, удалить его из всех 3 мест и сделать необходимый экспорт:

$ export HADOOP_USER_CLASSPATH_FIRST=true 
+0

не нужно удалять библиотеку jline-0.9.94.jar, а не просто добавить «export HADOOP_USER_CLASSPATH_FIRST = true» в bashrc –

3

Я просто установить

HADOOP_USER_CLASSPATH_FIRST=true 

и это работает для меня на этот вопрос.

1

С версией Hadoop 2.4.1 и Hive 1.2.0. Я была такая же проблема. И после установки HADOOP_USER_CLASSPATH_FIRST = true в .bashrc

Он работал как шарм !!!

0

Вы должны инициализировать Hadoop libary:

$ vi ~/.bashrc 
$ export HADOOP_USER_CLASSPATH_FIRST=true 
$ source .bashrc 
$ hive 
0

Я переименованный

addJava "-Djline.terminal=jline.UnixTerminal"

в

addJava "-Djline.terminal=jline2.UnixTerminal"

в файле "активатор"

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