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的性能。

你可能感兴趣的:(hbase,大数据,hbase)