检查HBase核心服务进程
使用jps命令查看当前用户的Java进程,确认HMaster(主节点)和HRegionServer(RegionServer)进程是否存在。若进程缺失,尝试手动启动集群:
${HBASE_HOME}/bin/start-hbase.sh
若启动失败,继续排查日志或端口冲突问题。
验证ZooKeeper服务可用性
HBase依赖ZooKeeper管理元数据,需确保ZooKeeper集群正常运行:
jps | grep QuorumPeerMain(若未运行,执行${ZK_HOME}/bin/zkServer.sh start启动)。/hbase节点:${ZK_HOME}/bin/zkCli.sh -server localhost:2181
ls /hbase
若/hbase节点不存在,需检查hbase-site.xml中hbase.zookeeper.quorum配置(需指向正确的ZooKeeper节点)。确认HDFS健康状态
HBase数据存储在HDFS上,需确保HDFS NameNode和DataNode运行正常:
jps | grep -E "NameNode|DataNode"。/hbase):hdfs dfs -ls /hbase
若权限不足,可通过hdfs dfs -chmod -R 755 /hbase修复。ServerNotRunningYetException(核心服务未启动)
错误表现为HBase Shell执行list命令时报错“Server is not running yet”,常见原因包括:
start-hbase.sh启动集群。netstat -anp | grep <端口>定位冲突进程,修改hbase-site.xml中的端口号。ZooKeeper连接失败
错误表现为“Unable to create ZooKeeper connection”,解决方法:
hbase-site.xml中的hbase.zookeeper.quorum配置(需包含所有ZooKeeper节点IP,如zk1, zk2, zk3)。telnet <zk_host> 2181测试连通性。${ZK_HOME}/bin/zkServer.sh restart。HDFS安全模式阻塞
错误表现为“HDFS is in safe mode”,解决方法:
执行HDFS命令强制退出安全模式:
hdfs dfsadmin -safemode leave
若仍无法退出,需检查HDFS NameNode日志(位于$HADOOP_HOME/logs/),修复底层问题(如磁盘故障、数据块丢失)。
RegionServer崩溃(OOM或进程退出)
错误表现为RegionServer进程突然消失,日志中出现“OutOfMemoryError”或“java.lang.OutOfMemoryError: Java heap space”,解决方法:
hbase-env.sh中的HBASE_REGIONSERVER_OPTS,增加堆内存(如-Xms4G -Xmx4G)。hbase-env.sh中添加:export HBASE_REGIONSERVER_OPTS="$HBASE_REGIONSERVER_OPTS -XX:+UseG1GC"
hbase.tmp.dir(默认./tmp)下的旧文件,释放磁盘空间。Region分裂/合并异常
错误表现为Region处于FAILED_OPEN状态,无法启动,解决方法:
hbck工具修复Region分配问题:hbase hbck -fixAssignments
hbase hbck -fixHdfsOrphans
hbase hbck -fixMeta -fixAssignments <table_name>
查看详细日志定位问题
HBase日志默认位于${HBASE_HOME}/logs/目录下,关键日志文件包括:
hbase-<user>-master-<hostname>.log(Master节点日志):记录集群元数据变更、Region分配等信息。hbase-<user>-regionserver-<hostname>.log(RegionServer节点日志):记录Region状态、数据写入/读取等信息。tail -n 100 <日志文件>查看最新日志,通过关键词(如“ERROR”“Exception”)定位具体问题。使用hbck工具检查集群一致性
hbck是HBase提供的集群一致性检查工具,可检测Region分配、表完整性等问题:
hbase hbck(输出“OK”表示无问题)。hbase hbck -fixHdfsOverlaps。hbase hbck -fixMeta。top、htop监控CPU、内存使用,df -h监控磁盘空间,避免资源耗尽导致服务崩溃。hbase snapshot create <snapshot_name> <table_name>)备份重要表数据。create 'table_name', 'cf', SPLITS => ['1000', '2000', '3000']),避免Region热点问题。