部署hive本地模式遇到的问题以及解决方法
(原理也不懂,就是弄着弄着就好了,有待学习。。。)
1、元数据没有初始化
解决方法:
schematool -dbType mysql -initSchema(此时使用的数据库是MySQL)
2、hive启动时报错
Exception in thread "main" Java.lang.RuntimeException: java.lang.IllegalArgumentException: java.net.URISyntaxException: Relative path in absolute URI: ${system:java.io.tmpdir%7D/$%7Bsystem:user.name%7D at org.apache.Hadoop.hive.ql.session.SessionState.start(SessionState.java:444) at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:672) at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:616) 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.main(RunJar.java:160) Caused by: java.lang.IllegalArgumentException: java.net.URISyntaxException: Relative path in absolute URI: ${system:java.io.tmpdir%7D/$%7Bsystem:user.name%7D at org.apache.hadoop.fs.Path.initialize(Path.java:148) at org.apache.hadoop.fs.Path.<init>(Path.java:126) at org.apache.hadoop.hive.ql.session.SessionState.createSessionDirs(SessionState.java:487) at org.apache.hadoop.hive.ql.session.SessionState.start(SessionState.java:430)
解决方法:
配置hive-site.xml
#如下命令将"${system:Java.io.tmpdir}"字段全部替换成"/hive/tmp"
sed -i 's#${system:Java.io.tmpdir}#/hive/tmp#g' hive-site.xml
3、hive中 “show databases;” 时出错
暂时没解决。。。
----------------------------------------------------------------------------------------------------------------------------------
解决啦!!!
但是咱啥也不知道,只能说配置hive-site.xml真的要面面俱到
在hive-site.xml中加入以下代码
<property>
<name>hive.exec.local.scratchdir</name>
<!-- <value>${system:java.io.tmpdir}/${system:user.name}</value>-->
<value>/var/develop/apache-hive-2.1.1-bin/iotmp</value>
<description>Local scratch space for Hive jobs</description>
</property>
<property>
<name>hive.downloaded.resources.dir</name>
<!--<value>${system:java.io.tmpdir}/${hive.session.id}_resources</value>-->
<value>/var/develop/apache-hive-2.1.1-bin/iotmp/${hive.session.id}_resources
</value>
<description>Temporary local directory for added resources in the remote file system.
</description>
</property>
在加入这段代码之前,也加了另一段代码,但是没有什么用,就是不知道成功运行是不是两段代码共同作用的(真的是好菜啊。。。什么都不懂)
<name>hive.exec.scratchdir</name>
<value>/tmp/hive</value>
<name>hive.exec.local.scratchdir</name>
<value>/tmp/hive</value>
<name>hive.downloaded.resources.dir</name>
<value>/tmp/hive/${hive.session.id}_resources</value>
<name>hive.scratch.dir.permission</name>
<value>733</value>