HBase-WAL有关线程处理逻辑

HBase-WAL相关线程处理逻辑

 

日志同步线程 HLog$LogSyncer

hbase.regionserver.optionallogflushinterval默认1秒

配置log syncer线程扫描间隔

更新、增加、删除操作会触发一次WAL,而WAL是同步写入到hadoop的,也就是先写WAL,再做更新(或者删除)

这些操作是在handle线程中完成的

1.handle先创建一个WAL,放入队列中

2.之后检查标志位,是否是同步写WAL

3. a)如果是再从队列中获取WAL,写入到haddop中

   b)此时,日志同步线程也会定期检查队列,将队列中的WAL获取后写入到hadoop中

 

所以这里是有两个地方可以写WAL,handle线程中不管有没有配置同步写标志, LogSyncer线程都会写WAL

LogSyncer默认是1秒同步一次WAL,所以如果配置了handle异步更新WAL,又出现了大量的更新操作

日志队列中的数据将会非常多(包含了很多KeyValue),所以这时应该把检查间隔时间调小

 

所有的HRegion会共用一个HLog对象,所有的WALEdit是写入到一个队列中

使用异步WAL写会提高整体性能,但LogSyncer的设计并不好,这个实现是wait()一段时间,如果检查队列中数据

则进行处理,由每次都是先wait()再检查队列

 

 

 

日志回滚线程

日志切分线程