HQuorumPeer
进程是一个 ZooKeeper
实例,由 HBase
控制和启动。如果没有使用自己的 Zookeeper
,而是使用 Hbase
托管的, 那么每个集群节点只能使用一个实例,并且仅适用于测试。
QuorumPeerMain
进程是 Zookeeper
独立的进程, ZooKeeper
在 HBase
之外运行。
stop-hbase.sh
可能没有关闭 HRegionServer
进程,需要自己关闭
/opt/hbase-2.4.16/bin/hbase-daemon.sh stop regionserver
# 或者 jps 查看进程号,使用 kill -9 杀死进程
hbase-site.xml
中的 hbase.rootdir
的主机和端口号必须和 core-site.xml
中的 fs.defaultFS
的保持一致,即主机相同且端口统一使用 8020
或者 9000
。ZooKeeper
集群不稳定或者不可用:HMaster
依赖于 ZooKeeper
进行状态管理和协调,如果 ZooKeeper
出现问题,可能会影响到 HMaster
的运行。HBase Master
能够通过网络与其他节点(包括 ZooKeeper
)通信。检查网络连接和防火墙设置,确保必要的端口是开放的。HMaster
需要与 ZooKeeper、RegionServers
和其他服务保持稳定的网络连接。网络问题可能导致 HMaster
无法正常工作并自动关闭。zookeepeer➡hadoop➡hbase
./zk.sh start
./myhadoop.sh start
start-hbase.sh
hbase➡hadoop➡zookeepeer
stop-hbase.sh
./myhadoop.sh stop
./zk.sh stop
单点关闭,去日志里查找问题,日志里会提供关于问题的更多详细信息和上下文。
$HBASE_HOME/bin/hbase-daemon.sh stop master
$HBASE_HOME/bin/hbase-daemon.sh stop regionserver
ERROR: org.apache.hadoop.hbase.ipc.ServerNotRunningYetException: Server is not running yet
at org.apache.hadoop.hbase.master.HMaster.checkServiceStarted(HMaster.java:2815)
at org.apache.hadoop.hbase.master.MasterRpcServices.isMasterRunning(MasterRpcServices.java:1163)
at org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos$MasterService$2.callBlockingMethod(MasterProtos.java)
at org.apache.hadoop.hbase.ipc.RpcServer.call(RpcServer.java:387)
at org.apache.hadoop.hbase.ipc.CallRunner.run(CallRunner.java:132)
at org.apache.hadoop.hbase.ipc.RpcExecutor$Handler.run(RpcExecutor.java:369)
at org.apache.hadoop.hbase.ipc.RpcExecutor$Handler.run(RpcExecutor.java:349)
HBase Master
启动可能需要一些时间。如果你刚刚启动了 Master
,可能需要等待一段时间让它完全启动并注册到 ZooKeeper
中。HBase Master
进程是否在运行。你可以通过查看系统进程(例如使用 jps
命令)或者检查 HBase
的日志文件来确定 Master
的状态。HBase
和 ZooKeeper
的配置文件中的地址、端口和其他设置都是正确的。任何错误的配置都可能导致 Master
无法启动或者无法与 ZooKeeper
正确通信。HBase Master
能够通过网络与其他节点(包括 ZooKeeper
)通信。检查网络连接和防火墙设置,确保必要的端口是开放的。HBase
和 ZooKeeper
的日志文件,它们可能会提供关于问题的更多详细信息和上下文。报错信息如下:
WARN [RS-EventLoopGroup-1-1] concurrent.DefaultPromise: An exception was thrown by org.apache.hadoop.hbase.io.asyncfs.FanOutOneBlockAsyncDFSOutputHelper$4.operationComplete()
java.lang.IllegalArgumentException: object is not an instance of declaring class
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.hadoop.hbase.io.asyncfs.ProtobufDecoder.<init>(ProtobufDecoder.java:64)
......
解决方案:
1)使用 Hadoop
的 jar
包替换 hbase
的 jar
包,并将 hbase
的 jar
包备份
cp $HADOOP_HOME/share/hadoop/common/lib/slf4j-log4j12-1.7.30.jar $HBASE_HOME/lib/client-facing-thirdparty/slf4j-log4j12-1.7.30.jar
cp $HADOOP_HOME/share/hadoop/common/lib/slf4j-api-1.7.30.jar $HBASE_HOME/lib/client-facing-thirdparty/slf4j-api-1.7.30.jar
mv $HBASE_HOME/lib/client-facing-thirdparty/slf4j-reload4j-1.7.33.jar $HBASE_HOME/lib/client-facing-thirdparty/slf4j-reload4j-1.7.33.jar.bak
mv $HBASE_HOME/lib/client-facing-thirdparty/slf4j-api-1.7.33.jar $HBASE_HOME/lib/client-facing-thirdparty/slf4j-api-1.7.33.jar.bak
2)修改 hbase-env.sh
vim $HBASE_HOME/conf/hbase-env.sh
禁用 Hadoop
的类路径查找功能,类路径的查找可能会引发问题或冲突。
export HBASE_DISABLE_HADOOP_CLASSPATH_LOOKUP=true
3)重新启动 hbase
集群
stop-hbase.sh
start-hbase.sh
报错信息如下:
WARN [main] util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
官方解决方案:Apache HBase ™ Reference Guide