开发者社区> 问答> 正文

HBase Major Compaction没有清除Delete标志

【现象总结】手动触发major compaction后,用raw scan发现还有Delete标志存在。

找了一行有问题的行,然后手动major compact它所在的region,问题能重现。 已确认两点: 在对应的RegionServer的log里能确认Major compaction成功了,最后生成的新HFile也只有一个。 Delete标志没有在Memstore中,因为先触发flush再触发major compaction后还是能看到delete标志

用hfile工具打印底层的key value发现Delete标志确实还存在:image.png 图中的两个时间戳,大的是1542103366506(Tue Nov 13 02:02:46 PST 2018);小的是1473992836877(Thu Sep 15 19:27:16 PDT 2016),都是合法时间戳。另外集群的 hbase.hstore.time.to.purge.deletes 配置是0。

展开
收起
pandacats 2019-12-20 21:27:19 1078 0
1 条回答
写回答
取消 提交回答
  • /** Parameter name for # days to keep MVCC values during a major compaction / public static final String KEEP_SEQID_PERIOD = "hbase.hstore.compaction.keep.seqId.period"; /* At least to keep MVCC values in hfiles for 5 days */ public static final int MIN_KEEP_SEQID_PERIOD = 5;

    就这个,会控制MVCC至少保留几天,默认值是5天,所以你现在再跑一次major compaction可能就没了

    这个主要是解决replication乱序可能导致主备不一致的问题,比如你先put再delete,同步到备集群之后是先delete再put,如果在中间做了一个major compaction,delete没了,之后同步过去那个put就没法被删掉了,于是数据就不一致了

    2019-12-20 21:27:32
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
大数据时代的存储 ——HBase的实践与探索 立即下载
Hbase在滴滴出行的应用场景和最佳实践 立即下载
阿里云HBase主备双活 立即下载