ps : 本次总结是因为自己踩了不少坑。特此总结一下。大部分结论在网络上也可能存在。。。
开发环境:
1. hadoop 3.2.0
2. hbase-2.1.3
3. zookeeper-3.4.13
环境搭建好了之后查看进程:
[centos@s110 hbase-2.1.3]$ jps
1810 NameNode
2516 NodeManager
2389 ResourceManager
9846 HRegionServer
10167 Main
1929 DataNode
18265 Jps
2155 SecondaryNameNode
10365 Main
8974 QuorumPeerMain
9679 HMaster
发现hadoop hbase 相关的进程都在。但是在过了几分钟之后,再次查看的时候HMaster 进程会自己挂掉。
有时候启动的时候,发现会有两个 HRegionServer。观察日志的时候发现HRegionServer 注册不上。
[centos@s110 soft]$ jps
3200 HRegionServer
1810 NameNode
3267 Jps
2516 NodeManager
3236 HRegionServer
2389 ResourceManager
1929 DataNode
2155 SecondaryNameNode
1566 QuorumPeerMain
2990 HMaster
查查hbase 相关日志发现:
WARN [master/s110:16000:becomeActiveMaster] master.HMaster: hbase:meta,,1.1588230740 is NOT online; state={1588230740 state=OPEN, ts=1551952388155, server=s101,16020,1551860949953}; ServerCrashProcedures=true. Master startup cannot progress, in holding-pattern until region onlined.
该日志会有大批记录记录在hbase-centos-master-***.log 中。
在网上百度了好多方式。
最后处理的方式是:
重新修改 hdfs-site.xml 配置文件。
重点在指定的了: hbase.tmp.dir ,hbase.zookeeper.property.dataDir,目录,确保用户有权限操作该目录。(ps 要是改目录下游数据,最好也清理了,原有数据可能会影响!)
如下是我本次的配置:
<configuration>
<!-- 指定hbase在hdfs上存储的路径 -->
<property>
<name>hbase.rootdir</name>
<value>hdfs://192.168.101.110:8020/hbase</value>
</property>
<property>
<name>hbase.master</name>
<value>hdfs://192.168.101.110:60000</value>
</property>
<property>
<name>hbase.tmp.dir</name>
<value>/home/centos/hbase/tmp</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/home/centos/hbase/zookeeper</value>
</property>
<!-- 指定hbase是分布式的 -->
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<!-- 指定zk的地址,多个用“,”分割 -->
<property>
<name>hbase.zookeeper.quorum</name>
<value>192.168.101.110:2181</value>
</property>
<property>
<name>hbase.zookeeper.property.clientPort</name>
<value>2181</value>
</property>
<property>
<name>hbase.unsafe.stream.capability.enforce</name>
<value>false</value>
</property>
</configuration>
2. 清理zookeeper相关hbase相应的信息。
1、进入zookeeper的bin目录;
2、执行客户端脚本:$sh zkCli.sh
3、查看Zookeeper节点信息: ls /
4、递归删除hbase节点:rmr /hbase
5、退出:quit
6、重启Zookeeper
#1、直接启动客户端脚本
$ zkCli.sh
#2、查看Zookeeper节点信息
[zk: localhost:2181(CONNECTED) 0] ls /
#3、递归删除hbase节点
[zk: localhost:2181(CONNECTED) 1] rmr /hbase
#4、退出客户端
[zk: localhost:2181(CONNECTED) 2] quit
#5、重启Zookeeper服务
$ zkServer.sh stop
$ zkServer.sh start
做完上述之后重启hbase 问题解决 ~!!!
问题分析:(ps : 后期收集查看原因总结归纳出来的。。。stackoverflow上也有同学这么归纳)
1. 在搭建环境过程中,反复启动hbase,zookeeper .
在hbase相应的目录中可能生成错乱的数据,在下次启动的时候,去读数据,倒是注册的时候老是连接不上注册中心。
hbase 对应注册不上的服务,采取重试的机制,所以导致HRegionServer 多次注册,在启动时进程可以查看出来。等重试到达一定次数时,还是失败进程会被推出。
2. zookeeper 搭建过过程中,改变hbase,或者多次未成功的注册。导致生产的目录不正常。当再次注册是,由于名字等信息高度类型被判定位同一个,实际上不是同一个。所以一直注册不成功。
end !
如若写的不对请麻烦告我,不胜感激~~