Hive 启动-[ERROR] 终端初始化失败;回落到不受支持

Hive startup -[ERROR] Terminal initialization failed; falling back to unsupported

我下载了hive,修改HADOOP_HOME为

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

我的实际 hadoop 路径是

/usr/local/hadoop

在 .bashrc 中我添加了以下环境变量

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)

尝试删除其中一个文件

SLF4J:在 [jar:file:/usr/local/hadoop/share/hadoop/common/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class 中找到绑定]

SLF4J:在 [jar:file:/usr/lib/hive/apache-hive-1.1.0-bin/lib/hive-jdbc-1.1.0-standalone.jar!/org/slf4j/impl/StaticLoggerBinder.[= 中找到绑定29=]]

那我想它只会选择绑定一个。因此多重​​绑定将不再可用

我遇到了同样的问题并从这个link开始工作:

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

  • Hive 已升级到 Jline2,但 Hadoop 库中存在 jline 0.9x。

因此您应该按照以下步骤操作:

  1. 从 Hadoop lib 目录中删除 jline(它只是从 ZooKeeper 传递过来的)。
  2. 导出 HADOOP_USER_CLASSPATH_FIRST=true

去掉$HADOOP_HOME/share/hadoop/yarn/lib/jline-0.9.94.jar路径下的jline-0.9.94.jar文件后试试

这是 link 到 jira 的票 https://issues.apache.org/jira/browse/HIVE-8609

我在 cloudera CDH5.4 上遇到了同样的问题。从 yarn/libs 文件夹中删除 jline-0.9.94.jar 对我有用。

检查这个link它可能对你有帮助Facing issue while running hive from CLI

使用新版本的 Hive (1.2.1),我只需将安装/lib 文件夹中的 jline-2.12.jar 替换为 jline-2.13.jar。

这样做locate jline

文件 jline-0.9.94.jar 位于 3 个位置,从所有 3 个位置删除它并进行必要的导出:

$ export HADOOP_USER_CLASSPATH_FIRST=true

我刚刚设置了

HADOOP_USER_CLASSPATH_FIRST=true

这个问题对我有用。

使用 Hadoop 版本 2.4.1 和 Hive 1.2.0。我遇到过同样的问题。在 .bashrc

中设置 HADOOP_USER_CLASSPATH_FIRST=true 之后

它非常有效!!!

您应该初始化 hadoop 库:

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

我重命名了

addJava "-Djline.terminal=jline.UnixTerminal"

addJava "-Djline.terminal=jline2.UnixTerminal"

在 "activator" 文件中