启动 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

为啥在 hive 中执行 group by 时出现错误?

使用 order by 时出现 Hive 错误

从 hortonworks 沙箱运行时出现 Hive 错误

设置 hive.exec.pre.hooks 时出现 ClassNotFoundException

当 hive.execution.engine 重视其 tez 时出现 NoSuchMethodError