数据刷写
1.触发时机
- MemStore内存默认是128M,当某个MemStore超过128M就会将其所在 region 的所有 memstore 都会刷写。
- 如果我们数据增加的很快,哪怕一到128M就刷写数据量还是在增加(数据增加速度大于刷写速度),当MemStore达到128*4=512MB的时候,就会阻止客户端写入数据到该MemStore
- 当 RegionServer的所有MemStore 占用内存总和大于总内存 *40% *95%的时候,整个RegionServer开始进行刷写
- 如果达到了 RegionServer 级别的 Flush,当前 RegionServer 的所有写操作将会被阻塞,这个阻塞可能会持续到分钟级别
- 当 WAL 文件的数量超过 hbase.regionserver.max.logs,region 会按照时间顺序依次进行刷写,直到 WAL 文件数量减小到 hbase.regionserver.max.log 以下(该属性名已经废弃,现无需手动设置,最大值为 32)
- 数据到达 Region 的时候是先写入 WAL,然后再被写到 Memstore
- 如果WAL 的数量越来越大,这就意味着 MemStore 中未持久化到磁盘的数据越来越多
- 当 RS 挂掉的时候,恢复时间将会变得很长,所以有必要在 WAL 到达一定的数量时进行一次刷写操作
- 自定义刷写的时间间隔,当达到自动刷写的时间,就会触发 memstore flush开始自动刷写
- 在Shell 中通过执行 flush 命令