1.前言
最近Hbase集群经常有问题于是作者把遇到的问题进行了汇总,避免其他同学在使用Hbase的过程中遇到相同的问题时不知道如何解决。
2.优化
2.1 Hbase启动半小时宕掉
Hbase集群底层使用Azure Blob Storage进行底层数据存储及查询,RegionServer在运行过程中经常出现OOM,Heap Dump分析发现每个HStore中的AbfsInputStrem占用4MB空间导致堆内存撑爆。查看hadoop-azure源码发现fs.azure.read.request.size默认配置4MB,调整配置64KB后问题解决也可以配置再小。
2.2 Hbase大合并队列积压过多
【1】Hbase集群运行一周后(默认)触发大合并导致大合并队列增加属于正常现象,但是在运行一段时间后问题依然存在没有下降趋势。怀疑大合并线程默认1太少了,动态调整配置hbase.regionserver.thread.compaction.large为3效果不明显。【2】查看日志发现合并限流策略引起合并时间过长,继续动态调整限流参数hbase.hstore.compaction.throughput.higher.bound、hbase.hstore.compaction.throughput.lower.bound后大合并队列在几小时后恢复正常。
2.3 Hbase归档日志不正常清理
【1】统计Hbase集群占用的数据存储时发现数据存储达到400多T。【2】查看HMaster日志发现出现清理异常,但是原因不够明确。【3】动态调整日志级别继续查看日志发现问题出现在SnapshotHFileCleaner。【4】结合源码及日志原因是.hbase-snapshot目录下出现非法目录T_DRIVING_STATISTICS_snap_…手动删除此目录后HMaster恢复正常删除。
2.4 Hbase的oldWal日志不正常清理
【1】查看HMaster日志发现replicationLogCleaner在进行清理是出现访问zookeeper会话失效异常。【2】动态调整日志级级别发现上述异常会引起oldWal日志不正常清理会导致HDFS存储使用上升风险。【3】查看HBASE-25612通过切换HMaster临时解决,根本上避免可升级Hbase版本或者根据HBASE-23340进行编译打包滚动重启集群。
3.配置
3.1 动态配置
需要修改的参数加入到hbase-site.xml中,然后在hbase shell中执行update_config指定regionserver名称,如整个集群都生效可使用update_all_config命令。
3.2 日志配置
访问HMaster UI或RegionServer UI在Log Level进行配置。
4.总结
在Hbase集群出现问题时我们可以结合日志、源码、社区分析原因并给出解决方法,而且日志输出级别、参数配置都支持动态修改可以更快的帮助我们解决问题。