HBase写数据过程
- Client向HregionServer发送写请求
- HregionServer将数据写到HLog(write ahead log,WAL),这一步是为了数据的持久化和恢复(可以理解为mysql的binlog)
- HregionServer将数据写到内存(MemStore)
- 反馈Client写成功
为了提升性能,写完数据之后由于数据是写在内存的,需要将内存中的数据flush到硬盘
数据flush的过程如下
- 当MemStore数据达到阈值(默认是128M),将数据刷到硬盘storefile,将内存中的数据删除,同时删除HLog中的历史数据
- 并将数据存储到HDFS中
- 在HLog中做标记点
为了减少小文件数量,会进行小文件的合并操作
数据合并过程如下
- 当数据块达到4块(storefile数量达到一定阈值后),Hmaster触发合并操作,Region将数据块加载到本地,进行合并
- 当合并的数据超过256M(storefile的大小达到一定阈值后),进行拆分,将拆分后的Region分配给不同的HregionServer管理
- 当HregionServer宕机后,将HregionServer上的hlog拆分,然后分配给不同的HregionServer加载,修改.META.
- HLog会同步到HDFS