hive初始化元数据报错message from server: “Host ‘192.168.40.136‘ is blocked because of many connection errors


问题描述

在安装hive时,初始化mysql元数据报错

Underlying cause: java.sql.SQLException : null, message from server: “Host ‘192.168.40.136’ is blocked because of many connection errors; unblock with ‘mysqladmin flush-hosts’”
SQL Error code: 1129
Use --verbose for detailed stacktrace.
*** schemaTool failed ***

以及进入hive时候的交互式命令,随便输入任何命令,比如show tables出错
FAILED: SemanticException org.apache.hadoop.hive.ql.metadata.HiveException: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient()

分析

  • 关于hive我的理解
  • hive是数据仓库,主要用于查询,在hive交互式坏境下,当我们我们输入 create table test(id string);这条命令时,这种表数据实际上是存储到hdfs上的。而元数据是存放在mysql上的(元数据就是记录数据存放在那里,比如书目录记录那个章节在那一页,而mysql元数据记录test在hdfs那个路径),所以hive要连接mysql才能存放元数据。当我们进行select * from test查询,hive就会从mysql查询元数据表test(test 在hdfs在某某路径),最后映射到hdfs路径。展现结果。所以mysql存放元数据,hdfs存放真正数据。如果,无法初始化hive元数据(重新更新初始化元数据),就不能映射到hdfs路径找不到表中的数据。自然就会报错。

解决方案:

在hive交互式环境中,输入hive sql报错,内容就是无法初始化hive元数据。初始化hive元数据报错,原因在于hive无法连接mysql进行存放元数据。那么如果只要能连接到mysql,就能存放元数据,能存放元数据就能够hive问题所在了。无法连接mysql原因是mysql版本是8.0而连接mysql驱动jar是5.1. ,低版本的jar包不能够连接高版本mysql(通常上,版本问题一般只有向下兼容,没有向上兼容)。只需要换个将mysql驱动包换成8.0。或者降低mysql版本就可以了。最后确认一下配置文件信息大功告成。

1 配置信息:注意自己mysql是否有创建hive数据库,还有hive用户的密码,还有是否授权允许所有主机连接访问

  1. mysql -u root -p 登入数据库

  2. create database hive; 创建hive数据库

  3. show databases; 查看数据库是否有hive
    在这里插入图片描述

  4. use mysql 进入mysql; 数据库

  5. create user ‘hive’@‘%’ identified by ‘123456’; 创建hive用户,密码123456,并且允许所有主机访问

  6. grant all privileges on . to ‘hive’@‘%’; 赋予hive用户所有权利

  7. flush privileges 刷新

  8. select user,host from user; 查看是否有hive用户
    在这里插入图片描述

退出mysql 格式化元数据
schematool -dbType mysql -initSchema
将mysql8.0驱动复制到hive文件下的lib目录下,并且删除原来低版本驱动jar包

进入hive/conf/ 修改hive-site.xml 配置文件

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
  <property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true</value>
    <description>JDBC connect string for a JDBC metastore</description>
  </property>
  <property>
    <name>javax.jdo.option.ConnectionDriverName</name>
    <value>com.mysql.jdbc.Driver</value>
    <description>Driver class name for a JDBC metastore</description>
  </property>
  <property>
    <name>javax.jdo.option.ConnectionUserName</name>
    <value>hive</value>
    <description>username to use against metastore database</description>
  </property>
  <property>
    <name>javax.jdo.option.ConnectionPassword</name>
    <value>123456</value>
    <description>password to use against metastore database</description>
  </property>
</configuration>
在这里插入代码片

最后启动hive,输入命令不报错 ,大功告成 。

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值