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()再检查队列
日志回滚线程
日志切分线程