我正在研究一个用例,我们需要为 HBase 中的表拍摄多个快照 (80-100),我们称之为“数据”。我们希望能够在任何给定时间读取这些快照。因此,我们需要克隆快照并将其用作新表(例如“data_v01”、“data_v02”等)。我无法弄清楚多个快照是否会影响原始“数据”表的性能。
根据我阅读 HBase 文档的了解,在拍摄快照或从快照创建新表(“克隆”)时,HBase 不会复制数据。对我来说,这似乎是 HBase 创建了一组基本的 HFile,然后以类似于 WAL 的形式跟踪更改。如果这是真的,并且基础快照已有 100 天,则意味着更改将会很多。我的理解正确吗?除了https://hbase.apache.org/book.html#ops.snapshots之外,我找不到太多关于此的引用资料。
最佳答案
您可能已经知道,HBase 一致性是由 HFile
和 WAL
文件的集合给出的。快照只是快照时表中所有 HFile 的列表(无论快照是否强制 WAL 和 memstore 刷新)。这就是为什么快照创建起来非常快且便宜 - 它所做的只是保存一个列表文件路径。这意味着在压缩时不得删除文件,而是将其移动到存档文件夹,直到没有快照引用它们(非常类似于 GC)。在某些情况下,这可能会导致存储开销。
I am unable to figure out whether having multiple snapshots affect the performance of the original "data" table.
从快照创建表与原始表无关。两个表可能共享一些 HFile 的事实没有任何意义,因为 HFile 是不可变的。
...(if) the base snapshot is 100 days old, this would mean (that the data is outdated)
是的,这是正确的。快照只会看到创建时已存在的 HFile。
关于performance - HBase - 快照性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57109411/