起因是大学课程里要求在hadoop上安装一个hbase来学习hbase的数据怎么导入,结果在安装完成之后发现依照顺序启动hadoop与hbase之后,过一段时间使用jps查看节点发现Hmaster与HRegionserver会自动关闭导致无法正常启动,网上搜寻一圈答案无果,后来自行解决发文记录一下。
本文中所使用的Hadoop版本为3.1.3,Hbase版本为2.2.2,Hadoop与Hbase均采用了伪分布式安装。安装参照了厦门大学林子雨教授的教程:大数据技术原理与应用(第3版) 第2章 大数据处理架构Hadoop 实践指南_厦大数据库实验室博客 (xmu.edu.cn)
报错信息如下:
2023-12-01 19:36:16,074 INFO [main-SendThread(localhost:2181)] zookeeper.ClientCnxn: Opening socket connection to server localhost/127.0.0.1:2181. Will not attempt to authenticate using SASL (unknown error)
2023-12-01 19:36:16,074 WARN [main-SendThread(localhost:2181)] zookeeper.ClientCnxn: Session 0x0 for server null, unexpected error, closing socket connection and attempting reconnect
java.net.ConnectException: Connection refused
at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:715)
at org.apache.zookeeper.ClientCnxnSocketNIO.doTransport(ClientCnxnSocketNIO.java:361)
at org.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:1141)
可以看得出来是Hbase连接到Zookeeper失败了。
先说我自己的解决途径是切换到外部的Zookeeper。
如果只安装了Hadoop和Hbase的话,你的Hbase大概率依赖的是它自己自带的Zookeeper,正常来说Hbase需要启动要连接到Zookeeper这项服务才行,连接不上就会导致Hbase无法正常启动,到我们这里反映出来就是Hmaster和HRegionserver节点会自行消失,所以下载一个外部的Zookeeper并且让你的Hbase去连接,问题就得以解决。
下载外部的Zookeeper:
我使用的是Hadoop3.1.3与Hbase2.2.2,查询兼容发现可以使用Zookeeper3.9.1,下载到虚拟机之后解压缩并且改名字之后进入它的conf目录修改zoo_sample.cfg为zoo.cfg,然后找到其中的datadir行将其修改为合适的路径即可。
修改HBase的启动项:
进入自己的Hbase目录下的conf/hbase-env.sh,寻找export HBASE_MANAGES_ZK,将它的值改为False。
启动:
原来的启动顺序为先启动Hadoop再启动Hbase;现在变为启动Hadoop,启动Zookeeper,启动Hbase。
zookeeper启动是在其自己的目录下执行bin/zkServer.sh start
关闭就把start改成stop就好。
按顺序启动之后再查看jps
hadoop@hadoop-virtual-machine:/usr/local/hbase$ jps
4496 HMaster
4577 HRegionServer
3173 SecondaryNameNode
4843 Jps
4348 QuorumPeerMain
2924 DataNode
2766 NameNode
问题解决