HBase WAL预写日志

HBase的region服务器会将数据保存到内存中,直到有足够多的数据才会将其刷写到硬盘中,这样可以避免创建很多的小文件。存储在内存中的数据具有不稳定性因素,因此如果服务器断电了那么内存中的数据就会丢失。
HBase中使用预写日志(WAL)的方式来解决这一问题:每次更新都会写入日志,只有写入成功才会通知客户端操作成功,然后服务器可以按需自由地批量处理或聚合内存中的数据。
下图展示WAL是怎样和HBase的架构结合在一起的,

HBase WAL预写日志_第1张图片

从上图可以看出,WAL被同一个region服务器的所有region共享,所以对于每一次修改它就像一个日志中心一样。
整个处理过程如下:
1 客户端启动一个操作来修改数据,如put(),delet()等。
2 每一个修改被封装到一个KeyValue对象实例,并通过RPC调用发送出来。
3 上述调用成批地发送给含有匹配region的HRegionServer。
4 数据先被写入到WAL,然后被放放到实际拥有记录的存储文件的MemStore中。
5 当MemStore达到一定的大小或经历一个特定时间之后,数据会异步地连续写入到文件系统中。

由于实际的日志存储在HDFS上,所以即使在服务器完全崩溃的情况下,WAL也能保证数据不会丢失。其他服务器可以打开日志文件然后回放这些修改。

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