hive安装版本: apache-hive-1.2.2
环境:ubantu18.04, hadoop本地模式,已安装——hadoop-2.6.0, spark-2.2.0
1.下载并解压hive源程序
hive-1.2.2下载地址
http://mirrors.hust.edu.cn/apache/hive/hive-1.2.2/
$ sudo tar -zxvf ./apache-hive-1.2.2-bin.tar.gz -C /usr/local # 解压到/usr/local中
$ cd /usr/local/
$ sudo mv apache-hive-1.2.1-bin hive # 将文件夹名改为hive
$ sudo chown -R laowang:laowang hive # 修改文件权限
2.配置环境变量
$ sudo gedit ~/.bashrc
在最后添加:
export HIVE_HOME=/usr/local/hive
export PATH=$PATH:$HIVE_HOME/bin
保存退出后,终端运行
$ source ~/.bashrc
使配置立即生效
3.问题及解决办法
ls: 无法访问’/usr/local/spark/lib/spark-assembly-*.jar’: 没有那个文件或目录
$ hive
# 启动hive出现如下一个提示:
ls: 无法访问'/usr/local/spark/lib/spark-assembly-*.jar': 没有那个文件或目录
出现这个问题的原因是:
spark升级到spark2以后,原有lib目录下的大JAR包被分散成多个小JAR包,原来的spark-assembly-*.jar已经不存在,所以hive没法找到这个JAR包。
解决方法:
打开hive的安装目录下的bin目录,找到hive文件
$ cd /usr/local/hive/bin/
$ sudo gedit hive
# 找到下面这行shell脚本
sparkAssemblyPath=`ls ${SPARK_HOME}/lib/spark-assembly-*.jar`
# 将其修改为:
sparkAssemblyPath=`ls ${SPARK_HOME}/jars/*.jar`
# 保存并退出
再次启动hive,出现下面的错误:
[ERROR] Terminal initialization failed; falling back to unsupported
$ hive
Logging initialized using configuration in jar:file:/usr/local/hive/lib/hive-common-1.2.2.jar!/hive-log4j.properties
[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:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
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:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.hadoop.util.RunJar.run(RunJar.java:221)
at org.apache.hadoop.util.RunJar.main(RunJar.java:136)
错误原因:
在/hive/conf/lib目录中存在jline-x-x.jar,而/hadoop/share/hadoop/yarn/lib目录中存在老版本的jline-x-x.jar。
解决办法:进入到hadoop安装目录下的share/hadoop/yarn/lib下 删除 jline的jar文件。再启动hive即可。
$ cd /usr/local/hadoop/share/hadoop/yarn/lib/
$ ls
activation-1.1.jar guice-servlet-3.0.jar jettison-1.1.jar
aopalliance-1.0.jar jackson-core-asl-1.9.13.jar jetty-6.1.26.jar
asm-3.2.jar jackson-jaxrs-1.9.13.jar jetty-util-6.1.26.jar
commons-cli-1.2.jar jackson-mapper-asl-1.9.13.jar jline-0.9.94.jar
commons-codec-1.4.jar jackson-xc-1.9.13.jar jsr305-1.3.9.jar
commons-collections-3.2.1.jar javax.inject-1.jar leveldbjni-all-1.8.jar
commons-compress-1.4.1.jar jaxb-api-2.2.2.jar log4j-1.2.17.jar
commons-httpclient-3.1.jar jaxb-impl-2.2.3-1.jar netty-3.6.2.Final.jar
commons-io-2.4.jar jersey-client-1.9.jar protobuf-java-2.5.0.jar
commons-lang-2.6.jar jersey-core-1.9.jar servlet-api-2.5.jar
commons-logging-1.1.3.jar jersey-guice-1.9.jar stax-api-1.0-2.jar
guava-11.0.2.jar jersey-json-1.9.jar xz-1.0.jar
guice-3.0.jar jersey-server-1.9.jar zookeeper-3.4.6.jar
$ sudo rm jline-0.9.94.jar # 删除 jline-0.9.94.jar
启动hive成功!
为hive创建一个工作目录,存放hive的元数据,以后启动hive前,可先切换到该工作目录下,再启动hive。
$ mkdir hivework
$ cd hivework/
$ hive