问题描述
这几天在学习B站上黑马程序员的Hadoop入门课程,跟着视频进行各种软件的搭建,在搭建Hive时却遇到了以下的问题。当时情景为Hive安装在node3上,MySQL数据库安装在node1上。
Hive第一代客户端可以正常启动,但输入语句时会报如下的错误。
FAILED: HiveException java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient
失败的尝试
出现这一问题后开始查阅资料,下面这几种方案最常见,但均没有奏效。
- 没有对mysql数据库进行初始化。但我的确进行了初始化。
- 删除元数据后重新初始化。尝试了但也没有解决问题。
- 元服务metastore没有启动。但我也确实启动了。
- 修改配置文件hive-site.xml。我尝试了但没有解决问题,并且我是跟着教程来的,按理应该不是这里的问题。
自己的思考
看到资料中的方法均未奏效,我也在不断地琢磨。首先是通过命令查看hive运行的日志,发现最底层的报错如下。
MetaException(message:Could not connect to meta store using any of the URIs provided. Most recent failure: org.apache.thrift.transport.TTransportException: java.net.ConnectException: 拒绝连接 at org.apache.thrift.transport.TSocket.open(TSocket.java:226) at org.apache.hadoop.hive.metastore.HiveMetaStoreClient.open(HiveMetaStoreClient.java:430)
由此我想到是否是两台机器不能通信?但是之前可以对MySQL数据库初始化已经表明这之间的通信没有问题。
最终解决
我决定第二天重新进行整个安装,使用Workstation的快照功能将虚拟机恢复为安装好Hadoop的状态,HDFS和YARN都可以正常工作。
一步一步地跟着视频走,我发现昨天我和视频教程的区别是视频中在启动metastore后继续启动了hiveserver2,而我只启动了metastore,我这样做是看到了下面这张图,由于测试的是Hive CLI这个老客户端,所以我只启动了metastore,之后也一直没往这儿想。
我试着也启动了两个服务,再测试时成功了! 我以为问题就在这里,应该是二者都需要启动。但随后我尝试关闭了hiveserver2服务,但是仍然有上图的结果。所以或许是必须启动一次hiveserver2?虽说代码不会说谎,但软件的世界或许也是有着不确定性的。
感想
之前看过debug的思路,有提到“放松心情,明天再看”,当时还不太理解,现在觉得这确实是一个重要的方法。Take it easy, and work hard.
|