通过./hive 命令启动hive的时候报错:
[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.setupConsoleReader(CliDriver.java:787)
at org.apache.hadoop.hive.cli.CliDriver.executeDriver(CliDriver.java:721)
at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:681)
at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:621)
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.setupConsoleReader(CliDriver.java:787)
at org.apache.hadoop.hive.cli.CliDriver.executeDriver(CliDriver.java:721)
at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:681)
at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:621)
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)
原因是这样的:
1.查看hadoop2.6.5里面的jline版本:
[root@node113 /usr/local/hadoop/hadoop-2.6.5]#find ./ -name jline* ./share/hadoop/httpfs/tomcat/webapps/webhdfs/WEB-INF/lib/jline-0.9.94.jar ./share/hadoop/kms/tomcat/webapps/kms/WEB-INF/lib/jline-0.9.94.jar ./share/hadoop/yarn/lib/jline-0.9.94.jar
2.切换到hive的目录/usr/local/hive/apache-hive-1.2.2-bin/lib,查看下下面的文件,发现hive这个lib目录文件夹下面的jline版本是2.12:
[root@node113 /usr/local/hive/apache-hive-1.2.2-bin/lib]#ls|grep jline
jline-2.12.jar
3.把hive下的jline拷贝到hadoop里面就行了:
cp /usr/local/hive/apache-hive-1.2.2-bin/lib/jline-2.12.jar /usr/local/hadoop/hadoop-2.6.5/share/hadoop/yarn/lib cp /usr/local/hive/apache-hive-1.2.2-bin/lib/jline-2.12.jar /usr/local/hadoop/hadoop-2.6.5/share/hadoop/kms/tomcat/webapps/kms/WEB-INF/lib cp /usr/local/hive/apache-hive-1.2.2-bin/lib/jline-2.12.jar /usr/local/hadoop/hadoop-2.6.5/share/hadoop/httpfs/tomcat/webapps/webhdfs/WEB-INF/lib
4.把hadoop2.6.5原有的jline删除:
[root@node113 /usr/local/hadoop/hadoop-2.6.5]#rm -rf ./share/hadoop/httpfs/tomcat/webapps/webhdfs/WEB-INF/lib/jline-0.9.94.jar [root@node113 /usr/local/hadoop/hadoop-2.6.5]#rm -rf ./share/hadoop/kms/tomcat/webapps/kms/WEB-INF/lib/jline-0.9.94.jar [root@node113 /usr/local/hadoop/hadoop-2.6.5]#rm -rf ./share/hadoop/yarn/lib/jline-0.9.94.jar