该文主要是记录本人在初次安装hive时遇到的一些问题及解决方法,如有错误,望大家指正。
问题一:
hive 启动时出现 java.lang.ExceptionInInitializerError
原因:安装的hive版本与hadoop版本不兼容
我当时安装的hadoop版本是3.1.3,然后找的hive版本是2.7.2,后来换成了hive3.1.2就好了
具体的hive和hadoop兼容关系可以看: https://hive.apache.org/downloads.html.
问题二:
Hive启动报错:java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument
原因:com.google.common.base.Preconditions.checkArgument这个类所在的jar包为:guava.jar
hadoop中该jar包的版本和hive中该jar包的版本不一致
解决办法:删去hive中的guava.jar包,然后把hadoop中的拷贝到hive的lib目录下
问题三:hive初始化错误com.ctc.wstx.exc.WstxParsingException: Illegal character entity: expansion character
原因:在hive-site.xml文件的3238行的第64列出现了特殊的不合法字符,主要是这几个‘’,代码如下:
<description>
Ensures commands with OVERWRITE (such as INSERT OVERWRITE) acquire Exclusive locks fortransactional tables. This ensures that inserts (w/o overwrite) running concurrently
are not hidden by the INSERT OVERWRITE.
</description>
可以直接把这个<description>删掉
问题四:hive初始化错误 java.lang.IllegalArgumentException: java.net.URISyntaxException: Relative path in absolute URI: KaTeX parse error: Expected '}', got 'EOF' at end of input: …a.io.tmpdir%7D/%7Bsystem:user.name%7D
解决方法:在hive-site.xml文件中添加以下配置:
<property>
<name>system:java.io.tmpdir</name>
<value>你的hive安装目录/tmp</value>
</property>
问题五:hive初始化错误
Error: Syntax error: Encountered “<EOF>” at line 1, column 64. (state=42X01,code=30000)
原因:hive-site.xml文件没配置好
主要可以看到它走的还是derby,但我们配置的是mysql,说明配置文件没有生效
我之前的hive-site.xml文件是直接copy的原有的hive-default.xml.template文件,里面有一些别的代码,我也不知道哪里错了,后来是直接自己重新建了一个空的hive-site.xml,然后内容如下:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>system:java.io.tmpdir</name>
<value>你的hive的安装路径/tmp</value>
</property>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://主机名称:3306/hive?createDatabaseIfNotExist=true</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>mysql的密码</value>
</property>
如果配置生效的化走的driver应该是mysql的。