1

我想知道如何在 Hadoop/HDFS/Hbase 中对数据进行版本控制。它应该是您模型的一部分,因为很可能会发生变化(长时间收集大数据)。

HDFS(基于文件的后端)的主要示例。

样本日志文件.log

timestamp x1 y1 z1 ...
timestamp x2 y2 z2 ...

我现在想知道在哪里添加版本信息。我看到了两种选择:

文件格式内的版本

日志文件.log


timestamp V1 x1 y1 z1 ...
timestamp V2 w1 x2 y2 z1 ...

文件名中的版本

*日志文件_V1.log*


timestamp x1 y1 z1 ...

*日志文件_V2.log*

timestamp w1 x1 y1 z1 ...

第二个选项(文件名中的版本)对我来说感觉更干净并且适合 HDFS(我可以简单地使用 *_v2* 作为排除旧版本样式文件的模式)。另一方面,我需要运行 2 个不同的作业,因为我无法在一个作业中分析版本片段。

HBase 怎么样,我猜在 HBase 中版本肯定会在另一个表列中结束(HDFS 是实现细节并用作 HBase 的后端)?

用于后端 Hadoop/HDFS/HBase 的版本控制数据的任何其他替代方法?

谢谢!

编辑:我的问题与如何处理版本信息本身有关,而不是时间戳。

4

2 回答 2

2

对于 HDFS,将时间戳存储在文件中会占用更多空间(每行都重复时间戳),但可以灵活地将多个日期保存在单个文件中。哪个更可取完全取决于您的用例。

对于 HBase,您有几个选择:您可以在行键中显式包含时间戳(和/或版本号),并将不同版本的数据项放入表中的不同行中;或者,您可以使用 HBase 的内置时间维度,它实际上包括数据库中每个单元格的时间戳(即每一行中每一列中的每个值),并允许您保留可配置数量的版本。默认情况下,扫描仅返回每个键/值的最新版本,但您可以在扫描时更改该行为以返回多个版本,或仅返回给定时间范围内的版本。

于 2012-05-25T15:04:17.257 回答
0

在我看来,有效的数据版本控制需要在一定程度上存储相同版本的记录。然后,您可以使用应用逻辑来选择适合您需要的版本。它类似于一些关系数据库正在做的事情。
CoachDB 可能会使用这种方法,尽管我不是 100% 确定它。
现在让我们看看 HDFS/HBase。从这个角度来看,它们是完全不同的,因为 HBase 允许数据变异和编辑,而 HDFS 则不允许。
因此,对于 HBase,您可以将 timestemp 作为密钥的最后一部分,并且所有版本都将放在一起
HDFS 适合存储少量大文件,我们无法编辑它们。我建议按照文件到达的顺序将所有版本写入文件,并使用 MapReduce 在 reducer 中将具有不同时间戳的所有版本记录组合在一起。这不会是有效的,因为所有数据都会通过洗牌,但你会控制。为了解决这个问题,我们可以通过定期执行此解决方案并将大多数记录的数据存储在一个版本中。

于 2012-05-27T07:37:19.670 回答