全网最细致的 HBase 内核解析( 五 )


当 HMaster 发现某个 region server 故障 , HMaster 会将这个 region server 所管理的 regions 分配给其它健康的 region servers 。为了恢复故障的 region server 的 MemStore 中还未被持久化到 HFile 的数据 , HMaster 会将 WAL 分割成几个文件 , 将它们保存在新的 region server 上 。每个 region server 然后回放各自拿到的 WAL 碎片中的数据 , 来为它所分配到的新 region 建立 MemStore 。

全网最细致的 HBase 内核解析

文章插图
WAL 包含了一系列的修改操作 , 每个修改都表示一个 put 或者 delete 操作 。这些修改按照时间顺序依次写入 , 持久化时它们被依次写入 WAL 文件的尾部 。
当数据仍然在 MemStore 还未被持久化到 HFile 怎么办呢?WAL 文件会被回放 。操作的方法是读取 WAL 文件 , 排序并添加所有的修改记录到 MemStore , 最后 MemStore 会被刷写到 HFile 。
全网最细致的 HBase 内核解析

文章插图
点评:故障恢复是 HBase 可靠性保障的一个重要特性 。WAL 在这里扮演了关键角色 , 在分割 WAL 时 , 数据会根据 region 分配到对应的新的 region server 上 , 然后 region server 负责回放这一部分数据到 MemStore 中 。
Apache HBase 架构的优点
  • 强一致性:当 write 返回时 , 所有的 reader 都会读到同样的值 。
  • 自动扩展性:数据变大时 region 会分裂 。使用 HDFS 存储备份数据 。
  • 内置恢复功能:使用 Write Ahead Log (类似于文件系统中的日志)
  • 与 Hadoop 结合:使用 MapReduce 处理 HBase 数据会非常直观 。
Apache HBase 也有问题
  • WAL 回放很慢 。
  • 故障恢复很慢 。
  • Major Compaction 时候 I/O 会飙升 。
本文授权转载自:https://segmentfault.com/a/1190000019959411

【全网最细致的 HBase 内核解析】


推荐阅读