Ich habe Hive heruntergeladen und HADOOP_HOME in geändert
HADOOP_HOME=${bin}/../../usr/local/hadoop
mein eigentlicher Hadoop-Pfad ist
/usr/local/hadoop
in .bashrc habe ich die folgenden env-variablen hinzugefügt
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/*:.
dann habe ich versucht, hive mit bin/hive zu starten. Ich habe den untenstehenden Fehler erhalten
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)
Ich hatte das gleiche Problem und habe es mit diesem Link zum Laufen gebracht:
https://cwiki.Apache.org/confluence/display/Hive/Hive+on+Spark%3A+Getting+Started
So sollten Sie diese Schritte befolgen:
Versuchen Sie nach dem Entfernen der Datei jline-0.9.94.jar unter dem Pfad $ HADOOP_HOME/share/hadoop/yarn/lib/jline-0.9.94.jar
Hier ist der Link zu jira ticket https://issues.Apache.org/jira/browse/Hive-8609
Ich habe gerade das eingestellt
HADOOP_USER_CLASSPATH_FIRST=true
und es funktioniert für mich in dieser Ausgabe.
Versuchen Sie, eine dieser Dateien zu löschen
SLF4J: Bindung gefunden in [ jar: file: /usr/local/hadoop/share/hadoop/common/lib/slf4j-log4j12-1.7.5.jar! /Org/slf4j/impl/StaticLoggerBinder.class ]
SLF4J: Bindung gefunden 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 ]
dann denke ich, dass es sich nur für eine Bindung entscheiden wird. Mehrfachbindung ist daher nicht mehr verfügbar
Mit Hadoop Version 2.4.1 und Hive 1.2.0. Ich hatte das gleiche Problem. Und nach dem Setzen von HADOOP_USER_CLASSPATH_FIRST = true in .bashrc
Es hat wie ein Zauber funktioniert !!!
Ich hatte das gleiche Problem mit Cloudera CDH5.4. Das Entfernen von jline-0.9.94.jar aus dem Ordner "arn/libs "hat für mich funktioniert.
Tun Sie dies locate jline
.
Die Datei jline-0.9.94.jar befindet sich an 3 Speicherorten, löscht sie von allen 3 Speicherorten und führt den erforderlichen Export aus:
$ export HADOOP_USER_CLASSPATH_FIRST=true
Sie sollten die Hadoop-Bibliothek initiieren:
$ vi ~/.bashrc
$ export HADOOP_USER_CLASSPATH_FIRST=true
$ source .bashrc
$ Hive
Mit der neuen Version von Hive (1.2.1) musste ich einfach jline-2.12.jar durch jline-2.13.jar im Installationsordner/lib ersetzen.
Ich habe umbenannt
addJava "-Djline.terminal=jline.UnixTerminal"
zu
addJava "-Djline.terminal=jline2.UnixTerminal"
in der "Aktivator" -Datei
Überprüfen Sie diesen Link, es könnte Ihnen helfen Probleme beim Ausführen von Hive über die CLI