Hbase不稳定因素分析
- 配置问题
- 内存配置不正确
目前hbase内存主要如下几个配置项:
1)HBASE_HEAPSIZE HBase RegionServer是内存贪婪性的,按照经验判断至少8~16G内存,但也不宜过大,更多内存应该分配给HBASE_OFFHEAPSIZE
2)HBASE_OFFHEAPSIZE Hbase offheap内存为非堆内存,主要在hbase缓存数据时使用,需要配合如下配置项使用,其中hbase.bucketcache.size的配置经验值为:HBASE_OFFHEAPSIZE*1024*0.8 MB<property>
<name>hbase.bucketcache.ioengine</name>
<value>offheap</value>
</property>
<property>
<name>hbase.bucketcache.size</name>
<value>HBASE_OFFHEAPSIZE*1024*0.8</value>
</property> - 磁盘配置不正确
太少的磁盘会导致集群的IO瓶颈,所以为了获取更好的IO性能,可以增加集群硬盘数量,但是不要加的太多,否则在几点或者磁盘出现故障时复制副本会很耗时。
- 内存配置不正确
- 系统问题
- 时间服务器不同步导致集群服务无法启动
目前regionserver节点的时间和master的时间差距大于30000ms,就是30秒时无法启动服务。此问题可以有两种解决方法:
1)定期同步各个节点的时间
2)可以修改集群中配置,增大时间差值(如果业务上不依赖hbase时间戳机制,可以将此值设置很大)<property>
<name>hbase.master.maxclockskew</name>
<value>180000</value>
<description>Time difference of regionserver from master</description>
</property> - hostname映射不正确,导致集群服务无法启动
http://hbase.apache.org/book.html#trouble.zookeeper
- 时间服务器不同步导致集群服务无法启动
- Hbase内部机制问题
- hbase major compact导致集群不稳定
major compact时会触发hbase集群密集的IO,此时会影响集群的读写性能,可能导致部分请求超时,如果对实时性要求比较高,可以禁止major compact,等集群空闲时手动执行。 - hbase垃圾清理时间过长,导致超时
此问题目前已经修改hbase-env.sh文件中配置的垃圾收集器算法 - zookeeper sesstion timeout
- 增大zookeeper超时时间(参考如下链接)
1)修改 $ZOOKEEPER_HOME/conf/zoo.cfg中tickTime配置The number of milliseconds of each tick
tickTime=6000具体配置描述可参考如下链接中的信息:
http://zookeeper.apache.org/doc/trunk/zookeeperAdmin.html#sc_configuration
2)修改$HBASE_HOME/conf/hbase-site.xml中的配置:<property>
<name>zookeeper.session.timeout</name>
<value>1200000</value>
</property>
<property>
<name>hbase.zookeeper.property.tickTime</name>
<value>6000</value>
</property>http://hbase.apache.org/book.html#trouble.rs.runtime.zkexpired
- zookeeper比Hbase Master对延迟更加敏感,推荐给zookeeper配置专用的磁盘写数据。
- 增大zookeeper超时时间(参考如下链接)
- hbase major compact导致集群不稳定
- 部署操作问题
- 集群格式化时,hbase集群格式化不干净,导致服务无法启动
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/9562.html