1. HBase服务无法启动
start-hbase.sh后,jps命令未显示HMaster或HRegionServer进程,或进程启动后立即退出。/var/log/hbase/目录下的hbase-<username>-master-<hostname>.log或hbase-<username>-regionserver-<hostname>.log,常见原因包括端口冲突、ZooKeeper连接失败、HDFS不可用。hbase-site.xml中的hbase.master.port参数,或通过netstat -tulnp | grep 16000找到占用端口的进程并终止。hbase-site.xml中的hbase.zookeeper.quorum(ZooKeeper集群地址)配置是否正确,或通过zkCli.sh -server zk_host:2181测试ZooKeeper连通性。jps | grep NameNode),且hbase.rootdir(如hdfs://namenode:9000/hbase)配置的路径权限正确(hdfs dfs -chown -R hbase:hadoop /hbase)。2. ZooKeeper连接异常
hbase shell无法连接集群。zkServer.sh status,确保所有节点处于“leader”或“follower”状态;若未启动,执行zkServer.sh start。hbase-site.xml中的hbase.zookeeper.quorum包含所有ZooKeeper节点地址(如zk1,zk2,zk3),且hbase.zookeeper.property.dataDir指向正确的ZooKeeper数据目录(如/var/lib/zookeeper)。hbase-site.xml中的hbase.zookeeper.session.timeout(默认3分钟),增大至5-10分钟(如<value>600000</value>)。/etc/security/limits.conf,添加hbase nofile 32768和hdfs nofile 32768,然后重启HBase。3. RegionServer宕机
jps命令中HRegionServer进程消失,hbase-regionserver-*.log中出现“OutOfMemoryError”或“Connection timed out”错误。hbase-env.sh中的HBASE_REGIONSERVER_OPTS,增大堆内存(如-Xms8g -Xmx8g),并开启MSLAB功能(-XX:+UseMemStoreLocalAllocationBuffer -XX:MemStoreChunkSize=64m)以减少内存碎片化。HBASE_REGIONSERVER_OPTS为-XX:+UseG1GC -XX:MaxGCPauseMillis=200。hbase-site.xml中的hbase.zookeeper.session.timeout,增大超时时间;同时确认ZooKeeper集群状态正常。hbase hbck -details检查Region状态,若有“FAILED_OPEN”状态的Region,执行hbase hbck -fixAssignments修复。4. 读写性能差
put操作耗时超过1秒)、读取延迟高(如get操作耗时超过2秒),或集群吞吐量低。-Xms16g -Xmx16g)。Long.MAX_VALUE - timestamp)或哈希前缀(如MD5(user_id)[0:4] + user_id),使数据均匀分布在Region上。hbase.regionserver.global.memstore.size(占堆内存40%,如<value>0.4</value>)和hbase.regionserver.blockcache.size(占堆内存40%,如<value>0.4</value>),优化读写缓存。hbase.hfile.compression设为SNAPPY,低CPU开销),增大Scan缓存(如scan 'my_table', {CACHE_BLOCKS => true, CACHE_SIZE => 1000})。put(List<Put>)、get(List<Get>)等批量接口,减少客户端与RegionServer之间的RPC调用次数。hbase balancer命令),避免单点压力过大。5. 数据一致性问题
hbase hbck报告表不一致(如“Missing region”)。hbase hbck命令检查表状态,若报告不一致,执行hbase hbck -fix修复。hbase-site.xml中的hbase.regionserver.optionallogflushinterval设置为合理值(如1000ms,默认1秒),避免因未刷盘导致数据丢失。snapshot命令)恢复,或从HFile文件中提取数据。