Hive初始化元数据常见报错

目录

         Hive元数据相关配置

一、hive的配置

二、mysql数据库配置

三、使用schematool 初始化hive的元数据

四、检查数据库

         hive初始化元数据常见的报错


                                  Hive元数据相关配置


一、hive的配置

下面是Hive元存储”的存储位置为MySQL数据库,必要的配置。包括连接URL,驱动类,数据库账号以及密码

<property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://master1-1:3306/hive?characterEncoding=UTF-8</value>
    <description>连接的url</description>
</property>
<property>
    <name>javax.jdo.option.ConnectionDriverName</name>
    <value>com.mysql.jdbc.Driver</value>
    <description>连接驱动类名</description>
</property>
<property>
    <name>javax.jdo.option.ConnectionUserName</name>
    <value>********</value>
    <description>连接数据库用户名</description>
</property>
<property>
    <name>javax.jdo.option.ConnectionPassword</name>
    <value>********</value>
    <description>连接数据库密码</description>
</property>

二、mysql数据库配置

1.首先我们要创建一个用于保存hive元数据的数据库

create database hive charset=utf8

2.赋予hive连接mysql用户远程的权限(这里我使用的是root账户来进行连接

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'PASSWORD' WITH GRANT OPTION

3.将连接mysql的驱动包放到hive的lib目录下

cp mysql-connector-java.jar ${HIVE_HOME}/lib/

三、使用schematool 初始化hive的元数据

schematool -initSchema -dbType mysql

   

四、检查数据库

use hive

show tables;

我们会看到存放hive元数据的数据库已经生成了很多表,到这里,就表示你hive元数据配置和初始化成功了!


                             以下是hive初始化元数据常见的报错


以下错误是根据我自己遇到的,或者评论区朋友遇到的,解决之后整理的。如果你用了以下方法还解决不了,欢迎评论或者私信,解决之后我也会更新到下面

错误1: 

org.apache.hadoop.hive.metastore.HiveMetaException: Failed to get schema version.

这里的排查方法是:

(1)检查hive-site.xml的数据库用户名密码有没有写错

(2)检查用于连接的用户是否有远程登陆的权限


错误2:

[ERROR] Terminal initialization failed; falling back to unsupported
java.lang.IncompatibleClassChangeError: Found class jline.Terminal, but interface was expected

对于这个错误,我们把${HADOOP_HOME}/share/hadoop/yarn/lib/jline-0.9.94.jar这个文件删除就可以了

rm ${HADOOP_HOME}/share/hadoop/yarn/lib/jline*.jar

错误3:

有时候,由于你不是用的root用户进行安装会导致一些临时文件或者目录没有权限的问题

Logging initialized using configuration in file:/opt/apache-hive-2.3.5-bin/conf/hive-log4j2.properties Async: true
Exception in thread "main" 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:254)
        at org.apache.hadoop.fs.Path.<init>(Path.java:212)
        at org.apache.hadoop.hive.ql.session.SessionState.createSessionDirs(SessionState.java:659)
        at org.apache.hadoop.hive.ql.session.SessionState.start(SessionState.java:582)
        at org.apache.hadoop.hive.ql.session.SessionState.beginStart(SessionState.java:549)
        at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:750)
        at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:686)
        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:239)
        at org.apache.hadoop.util.RunJar.main(RunJar.java:153)
Caused by: java.net.URISyntaxException: Relative path in absolute URI: ${system:java.io.tmpdir%7D/$%7Bsystem:user.name%7D
        at java.net.URI.checkPath(URI.java:1823)
        at java.net.URI.<init>(URI.java:745)
        at org.apache.hadoop.fs.Path.initialize(Path.java:251)

 我们需要配置一下临时文件目录,而且hive的管理用户拥有访问这些目录的权限,最好的创建在安装hive的用户的用户目录下,我这里是hive用户,就创建在/home/hive这个目录下

<property>
    <name>Hive.exec.local.scratchdir</name>
    <value>/home/hive/tmp/</value>
    <description>资源文件目录</description>
  </property>
 
  <property>
    <name>hive.downloaded.resources.dir</name>
    <value>/home/hive/tmp/resources</value>
    <description>下载资源目录</description>
  </property>
 
<property>
    <name>hive.server2.logging.operation.log.location</name>
    <value>/home/hive/tmp/operation_logs</value>
    <description>日志文件目录</description>

错误4:

由于缺失mysql的依赖,连接不上数据库

org.apache.hadoop.hive.metastore.HiveMetaException: 
Failed to load driver Underlying cause: java.lang.ClassNotFoundException : com.mysql.jdbc.Driver Use --verbose for detailed stacktrace. 
*** schemaTool failed

对于这个问题,需要下载一个对应版本的mysql-connector.jar 然后放到hive的lib目录或者java的lib目录。要下载对应版本的依赖,不然还是可能连接不上!

关于缺少连接mysql依赖的其他报错信息(从评论区总结的):

有了驱动,但是就是连接不上

[root@h1 apache-hive-3.1.2-bin]# bin/schematool -initSchema -dbType mysql -verbos
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/export/server/apache-hive-3.1.2-bin/lib/log4j-slf4j-impl-2.10.0.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/export/server/hadoop-3.3.0/share/hadoop/common/lib/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory]
Metastore connection URL: jdbc:mysql:h1//:3306/hive3?createDatabaseIfNotExist=true&useSSL=false&useUnicode=true&characterEncoding=UTF-8
Metastore Connection Driver : com.mysql.jdbc.Driver
Metastore connection User: root
org.apache.hadoop.hive.metastore.HiveMetaException: Failed to load driver
Underlying cause: java.lang.ClassNotFoundException : com.mysql.jdbc

解决办法:

将驱动重命名成 mysql-connector-java.jar,然后放到/usr/share/java和$JAVA_HOME/lib 这两个目录,有些版本一定要重命名成mysql-connector-java.jar,否则可能会找不大驱动。如果还是不行,那就检查一下驱动版本。

错误5:

初始化的时候连接数据库被拒绝

org.apache.hadoop.hive.metastore.HiveMetaException: Failed to get schema version.
Underlying cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException : 
Access denied for user 'hive'@'%' to database 'hive'
SQL Error code: 1044
Use --verbose for detailed stacktrace.
*** schemaTool failed ***

这个是由于mysql 的hive用户没有访问hive这个库的权限,可以参考错误1进行检查

评论 39
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小羽Jary

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值