代码之家  ›  专栏  ›  技术社区  ›  schematic

如何在同一集群上的HBase中创建表的副本?或者,如何在工作状态下使用原始状态服务请求

  •  3
  • schematic  · 技术社区  · 14 年前

    1. CopyTable作业,它被描述为在 不同的 HBase群集。我认为它将支持集群内操作,但不知道它是否被设计为有效地处理该场景。

    你们中的一些人可能会问我为什么要这么做。我的设想是,我有数百万个需要访问的对象,如果你愿意的话,它们处于“快照”状态。有一个每天运行的批处理过程,它会更新许多这些对象。如果批处理过程中的任何步骤失败,我需要能够“回滚”到原始状态。不仅如此,在批处理过程中,我需要能够将请求服务到原始状态。

    因此,当前的流程是将原始表复制到工作副本,在更新工作副本的同时继续使用原始表服务请求。如果批处理过程成功完成,我将通知所有服务使用新表,否则我将丢弃新表。

    1 回复  |  直到 14 年前
        1
  •  1
  •   David L    14 年前

    HBase中的所有数据都有特定的时间戳。您可以使用一个参数执行读取(获取和扫描),该参数指示您希望从给定的时间戳开始读取数据的最新版本。您可以做的一件事是,使用这个指向批处理开始前一个时间的参数来读取服务器请求。批处理完成后,将读取时间戳提升到当前状态。

    如果采用这种方法,需要注意以下几点:

    • HBase表配置为存储给定单元的最新N个版本。如果用N个较新的值覆盖单元格中的数据,则在下次压缩时将丢失较旧的值。(您也可以将它们配置为使用TTL使单元格过期,但这听起来与您的情况不太匹配)。
    • 类似地,如果在处理过程中删除数据,那么在下一次压缩之后将无法读取它。

    因此,如果不在批处理过程中发出删除,并且表中已存在的相同数据的写入版本不超过配置保存的版本,则可以继续从正在更新的同一个表中提供旧请求。这有效地为您提供了一个快照。