Hbase写超时常见原因及AsyncFsWAL原理

Hbase常见写超时原因

原因1:MemStore的内存大小占用超出了阈值,导致写入阻塞

一般来说Memstore内存大量增大的原因是由于内存的数据来不及flush到HDFS中,这种情况下可以检查下HFile的文件数量,绝大部分情况下是由于HFile文件的数量超出了blockingStoreFile的阈值上限导致的flush阻塞,进而引起Memstore内存占用超标,这种时候我们就要看下集群的HFile文件数量为何增加了,比如看下Compact是不是来不及合并文件等

原因2:RegionServer的Active Handler耗尽

Rs是Active Handle就是用来处理写请求的句柄,等同于线程的概念,就是只有RS有空闲的Handler才能处理读写请求,Active Handler耗尽有两种场景:
1.不同业务之间写竞争导致,比如某个业务都是写入大的KV值,导致每次写请求都长时间持有Handler句柄,由于Handler句柄的数量是有限制的,这就导致其他业务就没法拿到空闲Handler句柄来处理写请求,对外表现就是有些业务的写超时,虽然这些业务写的kv值很小。这种情况可以理解成为长时间的排队
2.共享读写Handler句柄,由于存在大量的耗时的读操作,比如大规模的scan数据,这些scan对应几乎都是比较耗时的读磁盘操作,导致的Hander句柄耗尽,这样写请求很难获取到Handler句柄处理写操作,进而导致的写超时,这种情况下我们可以把读写Handler分离,分别配置读写队列的句柄,这样做到读写处理分离

AsyncFsWAL原理

对于Hbase来说,一次客户端写操作对应着一次写HLog+写Memstore的操作,其中写HLog分成两个步骤,一个Append到HDFS client端缓存,一个是sync刷新数据到磁盘,当有大量的客户端写时,每次写操作写到HLog的WAL日志都经历上述两个步骤会极大的影响性能,AsyncFsWAL的原理就是当同时有大量的客户端写操作时,先把这些WAL日志批量Append到Hdfs client缓存中,然后通过一次sync把这些批量的Wal日志一次性刷新到磁盘中,通过减少sync flush次数的方式来提高写Hlog的性能。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值