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)) - <PERFLOG method=Driver.run from=org.apache.hadoop.hive.ql.Driver>
2019-06-15 16:52:55,906 INFO [main]: log.PerfLogger (PerfLogger.java:PerfLogBegin(121)) - <PERFLOG method=TimeToSubmit from=org.apache.hadoop.hive.ql.Driver>
2019-06-15 16:52:55,906 INFO [main]: log.PerfLogger (PerfLogger.java:PerfLogBegin(121)) - <PERFLOG method=compile from=org.apache.hadoop.hive.ql.Driver>
2019-06-15 16:52:55,953 INFO [main]: log.PerfLogger (PerfLogger.java:PerfLogBegin(121)) - <PERFLOG method=parse from=org.apache.hadoop.hive.ql.Driver>
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)) - </PERFLOG method=parse start=1560577975953 end=1560577976556 duration=603 from=org.apache.hadoop.hive.ql.Driver>
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)) - </PERFLOG method=compile start=1560577975906 end=1560577976789 duration=883 from=org.apache.hadoop.hive.ql.Driver>
2019-06-15 16:52:56,789 INFO [main]: log.PerfLogger (PerfLogger.java:PerfLogBegin(121)) - <PERFLOG method=releaseLocks from=org.apache.hadoop.hive.ql.Driver>
2019-06-15 16:52:56,789 INFO [main]: log.PerfLogger (PerfLogger.java:PerfLogEnd(148)) - </PERFLOG method=releaseLocks start=1560577976789 end=1560577976789 duration=0 from=org.apache.hadoop.hive.ql.Driver>
2019-06-15 16:52:56,796 INFO [main]: log.PerfLogger (PerfLogger.java:PerfLogBegin(121)) - <PERFLOG method=releaseLocks from=org.apache.hadoop.hive.ql.Driver>
2019-06-15 16:52:56,796 INFO [main]: log.PerfLogger (PerfLogger.java:PerfLogEnd(148)) - </PERFLOG method=releaseLocks start=1560577976796 end=1560577976796 duration=0 from=org.apache.hadoop.hive.ql.Driver>
查看日志的另一种方法:如何查看更多的错误信息
在默认的日志级别情况下,是不能将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
,注释掉或删除即可
<!--
<property>
<name>hive.txn.manager</name>
<value>org.apache.hadoop.hive.ql.lockmgr.DbTxnManager</value>
</property>
-->
就这么简单~~。。原因是:尴尬
那属性hive.txn.manager
是干什么的??是用于Hive支持【事务】的。下方这些属性都是用于支持事务的:
<property>
<name>hive.support.concurrency</name>
<value>true</value>
</property>
<property>
<name>hive.exec.dynamic.partition.mode</name>
<value>nonstrict</value>
</property>
<property>
<name>hive.txn.manager</name>
<value>org.apache.hadoop.hive.ql.lockmgr.DbTxnManager</value>
</property>
<property>
<name>hive.compactor.initiator.on</name>
<value>true</value>
</property>
<property>
<name>hive.compactor.worker.threads</name>
<value>1</value>
</property>
参考这个解决问题,上述方法并未解决本文的问题。