【已解决】Hive启动后报错:FAILED: LockException [Error 10280]: Error communicating with the metastore

centos7+hadoop2.6.5+hive1.2.2+mysql5.7.26

记录采坑过程!~

[root@master master]# hive

Logging initialized using configuration in jar:file:/opt/bigdata/apache-hive-1.2.2-bin/lib/hive-common-1.2.2.jar!/hive-log4j.properties
hive> show databases;
FAILED: LockException [Error 10280]: Error communicating with the metastore
hive> 

重启hadoop集群,未解决。

尝试运行下面语句,但一直不动了

[root@master master]# hive --service metastore
Starting Hive Metastore Server
...

查看metastore 服务端口:

[root@master master]# ps -ef |grep HiveMetaStore
root      22026  20505  0 16:31 pts/1    00:00:00 grep --color=auto HiveMetaStore
[root@master master]# kill -9 22026
bash: kill: (22026) - 没有那个进程

发现并没有被占用掉它的端口。

查看日志:Hive的日志一般在/tmp/当前用户名/hive.log

[root@master root]# pwd
/tmp/root
[root@master root]# cat hive.log | tail -n 200
2019-06-15 16:52:55,905 INFO  [main]: log.PerfLogger (PerfLogger.java:PerfLogBegin(121)) - 
2019-06-15 16:52:55,906 INFO  [main]: log.PerfLogger (PerfLogger.java:PerfLogBegin(121)) - 
2019-06-15 16:52:55,906 INFO  [main]: log.PerfLogger (PerfLogger.java:PerfLogBegin(121)) - 
2019-06-15 16:52:55,953 INFO  [main]: log.PerfLogger (PerfLogger.java:PerfLogBegin(121)) - 
2019-06-15 16:52:55,959 INFO  [main]: parse.ParseDriver (ParseDriver.java:parse(185)) - Parsing command: show databases
2019-06-15 16:52:56,555 INFO  [main]: parse.ParseDriver (ParseDriver.java:parse(209)) - Parse Completed
2019-06-15 16:52:56,556 INFO  [main]: log.PerfLogger (PerfLogger.java:PerfLogEnd(148)) - 
2019-06-15 16:52:56,769 ERROR [main]: metastore.RetryingHMSHandler (RetryingHMSHandler.java:invoke(159)) - MetaException(message:Unable to update transaction database com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'hive.txns' doesn't exist
....
....

2019-06-15 16:52:56,789 ERROR [main]: ql.Driver (SessionState.java:printError(960)) - FAILED: LockException [Error 10280]: Error communicating with the metastore
org.apache.hadoop.hive.ql.lockmgr.LockException: Error communicating with the metastore
....
....
Caused by: MetaException(message:Unable to update transaction database com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'hive.txns' doesn't exist
 ....
 ...
2019-06-15 16:52:56,789 INFO  [main]: log.PerfLogger (PerfLogger.java:PerfLogEnd(148)) - 
2019-06-15 16:52:56,789 INFO  [main]: log.PerfLogger (PerfLogger.java:PerfLogBegin(121)) - 
2019-06-15 16:52:56,789 INFO  [main]: log.PerfLogger (PerfLogger.java:PerfLogEnd(148)) - 
2019-06-15 16:52:56,796 INFO  [main]: log.PerfLogger (PerfLogger.java:PerfLogBegin(121)) - 
2019-06-15 16:52:56,796 INFO  [main]: log.PerfLogger (PerfLogger.java:PerfLogEnd(148)) - 

查看日志的另一种方法:如何查看更多的错误信息
在默认的日志级别情况下,是不能将DEBUG信息输出,这样一来出现的各种详细的错误信息都是不能数错的。但是我们可以通过以下两种方式修改log4j输出的日志级别,从而利用这些调试日志进行错误定位,具体做法如下:

  $ hive --hiveconf hive.root.logger=DEBUG,console (hive启动时用该命令替代)

或者在${HIVE_HOME}/conf/hive-log4j.properties文件中找到hive.root.logger属性,并将其修改为下面的设置

hive.root.logger=DEBUG,console

查看hive-site.xml配置,发现hive.metastore.warehouse.dir我配置的是本地地址/opt/bigdata/apache-hive-1.2.2-bin/warehouse,速改为HDFS:

hdfs://master:9000/user/hive/warehouse

重启hadoop集群,终端重新hive依然报这个错。

master节点:

[root@master master]# mysql -uroot -p

mysql> create database metastore;
mysql> use metastore;
mysql> source /opt/bigdata/apache-hive-1.2.2-bin/scripts/metastore/upgrade/mysql/hive-schema-1.2.0.mysql.sql;

ERROR: 
Failed to open file 'hive-txn-schema-0.13.0.mysql.sql', error: 2
忽略这个报错

mysql> create user 'hive'@'%' identified by '111111';
mysql> revoke all privileges,grant option from 'hive'@'%';
mysql> grant all privileges on metastore.* to 'hive'@'%' with grant option;
mysql> flush privileges;
mysql> quit;

在mysql下:
show databases;
展示了hive这个数据库。

可以看见hive-site.xml,属性javax.jdo.option.ConnectionURL - jdbc:mysql://myhost/metastore用的是mysql://root/hive其中hive就是metastore。

接着重启hadoop集群,重启hive,一样报这个错。

把安装文件全部删了。----暂未做这个操作。
把mysql下的metastore/hive两个数据库也删了。数据库会在hive初始化时新建,如果没有的话。
重新安装hive----暂未做这个操作。

解决方法:
我的hive-site.xml中有这个属性hive.txn.manager,注释掉或删除即可


就这么简单~~。。原因是:尴尬

那属性hive.txn.manager是干什么的??是用于Hive支持【事务】的。下方这些属性都是用于支持事务的:


    hive.support.concurrency
    true


    hive.exec.dynamic.partition.mode
    nonstrict


    hive.txn.manager
    org.apache.hadoop.hive.ql.lockmgr.DbTxnManager


    hive.compactor.initiator.on
    true


    hive.compactor.worker.threads
    1

关于Hive-事务 官方手册

参考这个解决问题,上述方法并未解决本文的问题。

你可能感兴趣的:(Hive)