启动 HIVE 时出现 java.net.URISyntaxException
Posted
技术标签:
【中文标题】启动 HIVE 时出现 java.net.URISyntaxException【英文标题】:java.net.URISyntaxException when starting HIVE 【发布时间】:2015-01-21 20:58:08 【问题描述】:我是 HIVE 的新手。 我已经设置了hadoop并且效果很好,我想设置Hive。 当我启动 hive 时,它显示错误为
Caused by: java.net.URISyntaxException: Relative path in absolute URI: $system:java.io.tmpdir%7D/$%7Bsystem:user.name%7D
有什么解决办法吗?
【问题讨论】:
你能粘贴你的 hbase-site.xml 和 core-site.xml 【参考方案1】:线程“main”中的异常 java.lang.IllegalArgumentException:java.net.URISyntaxException:绝对 URI 中的相对路径:$system:java.io.tmpdir%7D/$%7Bsystem:user.name%7D system:java.io.tmpdir - 路径 system:user.name - 用户名
以上属性为系统级属性,需要用户自行设置,所以hive站点模板没有提供这些,需要手动配置。
设置上述属性,如在 hive-site.xml 中使用带有名称值键对的属性标签,由用户级别来选择 temp 的位置
<property>
<name>system:java.io.tmpdir</name>
<value>/user/local/hive/tmp/java</value>
</property>
<property>
<name>system:user.name</name>
<value>$user.name</value>
</property>
【讨论】:
【参考方案2】:将以下内容放在hive-site.xml的开头
<property>
<name>system:java.io.tmpdir</name>
<value>/tmp/hive/java</value>
</property>
<property>
<name>system:user.name</name>
<value>$user.name</value>
</property>
另见question
【讨论】:
这应该被标记为答案。 这就是解决方案。 @Exia 这应该被标记为答案。 @Igor - 如果我没记错的话,我当时查看了日志文件,发现这两个属性值应该是在启动HIVE时定义的 @JonathanL,仍然返回错误:java.lang.RuntimeException:无法创建目录/tmp/hive/java/1eb3bb53-f740-4753-996b-b53483ffa531_resources【参考方案3】:我在为 Hbase 启动 HMaster 时也遇到了同样的错误。 这已通过在 hbase-site.xml 的 hbase.rootdir 属性中指定要在其中存储 hbase 数据的 hdfs 上的目录路径得到纠正 之前我只使用相对路径。
导致异常的路径:hdfs://localhost:8020
正确的路径:hdfs://localhost:8020/hbase
【讨论】:
【参考方案4】:在 hfs-site.xml 中改变这个属性
<name>hive.exec.scratchdir</name>
<value>/tmp/hive-$user.name</value>
<name>hive.exec.local.scratchdir</name>
<value>/tmp/$user.name</value>
<name>hive.downloaded.resources.dir</name>
<value>/tmp/$user.name_resources</value>
<name>hive.scratch.dir.permission</name>
<value>733</value>
重启 hive metastore 和 hiveserver2
【讨论】:
$user.name 绝对是最好的正确答案。让您想知道为什么 hive 开发人员破坏了 $system:user.name 语法。 我在 hive-site.xml 中进行了上述更改(在 mac 上)。谢谢:)【参考方案5】:我自己想办法。 在 hive-site.xml 中,将 $system:java.io.tmpdir/$system:user.name 替换为 /tmp/mydir,正如 https://cwiki.apache.org/confluence/display/Hive/AdminManual+Configuration 中所述。
【讨论】:
【参考方案6】:在 hive-site.xml 中添加属性
<configuration>
<property>
<name>hive.metastore.schema.verification</name>
<value>false</value>
<description>Will remove your error occurring because of metastore_db in shark</description>
</property>
</configuration>
根据您的系统在 hive-env.sh 中添加 java 和 hadoop 路径。
# Set HADOOP_HOME to point to a specific hadoop install directory
export HADOOP_HOME=/home/user17/BigData/hadoop
#hive
export HIVE_HOME=/home/user17/BigData/hive
# Hive Configuration Directory can be controlled by:
export HIVE_CONF_DIR=$HIVE_HOME/conf
并在 .bashrc 中设置 hive 和 hadoop 路径
export JAVA_HOME=/home/user17/jdk
export PATH=$PATH:$JAVA_HOME/bin
export HADOOP_INSTALL=/home/user17/BigData/hadoop
export PATH=$PATH:$HADOOP_INSTALL/bin
export HADOOP_MAPRED_HOME=$HADOOP_INSTALL
export HADOOP_COMMON_HOME=$HADOOP_INSTALL
export HADOOP_HDFS_HOME=$HADOOP_INSTALL
export YARN_HOME=$HADOOP_INSTALL
export HIVE_INSTALL=/home/user17/BigData/hive
export PATH=$PATH:$HIVE_INSTALL/bin
注意——这里所有的文件路径都是根据我的系统设置的,你应该根据你的系统给出路径。 如果不起作用,请告诉我
【讨论】:
以上是关于启动 HIVE 时出现 java.net.URISyntaxException的主要内容,如果未能解决你的问题,请参考以下文章
Hive 协议缓冲区 - 在 Hive 中创建表时出现 NullPointerException