HBase Compaction-(4)Compaction容错性

我们一定不想,做一个Compaction,中间失败了,导致我们的数据丢失了。

那HBase的Compaction是如何保证容错性呢?

环境

HBase rel-2.1.0

解析

其实容错性这儿做的很简单。我们直接上代码:

List<HStoreFile> sfs = moveCompactedFilesIntoPlace(cr, newFiles, user);
writeCompactionWalRecord(filesToCompact, sfs);
replaceStoreFiles(filesToCompact, sfs);

上述代码在HStore.doCompaction(CompactionRequestImpl cr, Collection<HStoreFile> filesToCompact, User user, long compactionStartTime, List<Path> newFiles)中。

总共有这么三步:

  1. 将产生的临时文件写到HDFS对应的地方去
  2. 写WAL文件
  3. 追加到StoreFileManager.storefiles中去,并从HStore.fileCompacting中移除选择出来的compact的HStoreFile。

我们来分析每一步出错造成的影响。

假设第一步出错,服务器挂掉了,没关系,由于compact时,生成的文件是保存在tmp下面的,所以没什么影响。

假设第一步没问题,第二步出错了,没有写到WAL文件中。那么,也没关系。由于HRegion启动时,会根据WAL来将HStoreFile添加到StoreFileManager.storefiles中去,所以这里相当于没做compact。也不会有数据丢失的影响。最多可能有冗余数据,这里以后可以验证一下。

假设第二步通过,第三步挂掉了。那也没关系。WAL已经写了,启动的时候,根据WAL文件重放就好了。

至于何时会删掉原来用于Compact的HStoreFile,这一点还没看到。不过,从上面的过程中,我们可以看到,不会有数据丢失的风险,最多会有数据冗余的问题。

这一点解决起来应该也不困难,我相信HBase中其实有相应的措施,只是我现在还没看到而已。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 小时候的豆豆出生在一个幸福的家里,因为豆豆是家里唯一的小孩,所以大人们都非常疼爱他。 但是豆豆一点也...
    芝士糯米团子阅读 2,944评论 2 0
  • 亲爱的江先生, 现在是八点十三分,我在医院。 我陪老妈来检查,正在候诊。一晚上我的心都不安。我早该引起重视的,一周...
    棉花去旅行阅读 2,880评论 0 1
  • 相信很多朋友都要这样那样的焦虑,总觉得自己不能全权抓住就没有收获,于是看书要从头到尾,看到别人报课程也跟着报课程,...
    筱艺整理阅读 741评论 0 0
  • 黑夜没有边际的黑,是任何人工照明都难敌过的。“宵桜”的舞台只有黑夜的黑可以充当。白川旁边沿河有一排复古建筑的...
    Asa二十代不在家阅读 3,604评论 0 2