hive初始化数据库失败 org.apache.hadoop.hive.metastore.HiveMetaException: Schema initialization FAILED!

在安装Hive后,执行数据库初始化时遇到HiveMetaException,提示Schema initialization FAILED!错误代码1030。问题根源在于创建表BUCKETING_COLS时的字符集冲突。通过将mysql配置文件中默认的utf-8字符集改为latin1,并重启mysql服务,成功解决了初始化问题。

问题:
安装好hive后,执行初始化数据库命令schematool -dbType mysql -initSchema,出现以下错误:

Starting metastore schema initialization to 2.3.0
Initialization script hive-schema-2.3.0.mysql.sql
Error: Got error 168 from storage engine (state=HY000,code=1030)
org.apache.hadoop.hive.metastore.HiveMetaException: Schema initialization FAILED! Metastore state would be inconsistent !!
Underlying cause: java.io.IOException : Schema script failed, errorcode 2
Use --verbose for detailed stacktrace.
*** schemaTool failed ***

执行命令 schematool -dbType mysql -initSchema --verbose 查看问题详情:
在这里插入图片描述

jdbc:mysql://39.106.229.57:3306/hive> CREATE TABLE IF NOT EXISTS BUCKETING_COLS ( SD_ID bigint(20) NOT NULL, BUCKET_COL_NAME varchar(256) CHARACTER SET latin1 COLLATE latin1_bin DEFAULT NULL, INTEGER_IDX int(11) NOT NULL, PRIMARY KEY (SD_ID,INTEGER_IDX), KEY BUCKETING_COLS_N49 (SD_ID), CONSTRAINT BUCKETING_COLS_FK1 FOREIGN KEY (SD_ID) REFERENCES SDS (SD_ID) ) ENGINE=InnoDB DEFAULT CHARSET=latin1
Error: Got error 168 from storage engine (state=HY000,code=1030)
Closing: 0: jdbc:mysql://39.106.229.57:3306/hive
org.apache.hadoop.hive.metastore.HiveMetaException: Schema initialization FAILED! Metastore state would be inconsistent !!
Underlying cause: java.io.IOException : Schema script failed, errorcode 2
org.apache.hadoop.hive.metastore.HiveMetaException: Schema initialization FAILED! Metastore state would be inconsistent !!

发现是创建表BUCKETING_COLS时出现了问题。

解决方法:
百度了好久,找到了一个办法,就是将hive数据库的字符集改成latin1:

mysql> alter database hive character set latin1;

再次初始化数据库但还是出现同样的错误,最后想起自己在安装mysql时,在/etc/my.cnf文件里设置了默认字符集为utf-8:
在这里插入图片描述
将这两行注释或者删掉后重启mysql服务:systemctl restart mysqld.service
再次初始化数据库,终于成功了,泪目
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值