Hive可以成功启动却无法执行语句的解决

问题描述

这几天在学习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,之后也一直没往这儿想。

Hive两代客户端
我试着也启动了两个服务,再测试时成功了!
泪目
我以为问题就在这里,应该是二者都需要启动。但随后我尝试关闭了hiveserver2服务,但是仍然有上图的结果。所以或许是必须启动一次hiveserver2?虽说代码不会说谎,但软件的世界或许也是有着不确定性的。

感想

之前看过debug的思路,有提到“放松心情,明天再看”,当时还不太理解,现在觉得这确实是一个重要的方法。Take it easy, and work hard.

猜你喜欢

转载自blog.csdn.net/CloudInSky1/article/details/126969194