我认为Hadoop的一个常见使用模式是通过加载来自操作系统的数据定期快照(例如每日)来构建一个“数据湖”。对于许多系统来说,每天的变化率通常不到行的5% (即使行被更新,也只有几个字段可以更改)。
问:这些历史数据如何在HDFS上构建,这样既节省了空间消耗,又有效地访问了.。
当然,答案将取决于数据的访问方式。在Hadoop集群中:
这意味着,尽管保存历史数据很重要,但不应以严重放缓那些只想知道昨日停业时数据的情况为代价的工作为代价。
我知道有几种选择似乎都不太令人满意:
(值得注意的是,它所需的只是一个特别不稳定的字段,每天进行更改,使后一个选项降低到与选项1相同的空间效率)。
So...is还有另一种将空间效率和易用性结合起来的选择吗?
发布于 2017-09-13 03:54:11
我建议一种备选方案3的变体,它尊重HDFS的附加性质。
我们保存了两个不同类型的信息,而不是一个数据集,它们分别存储:
与选项3不同的是,我们认为未过期的行与过期的行是不同类型的信息。
Pro:与HDFS的附加性质一致。
Pro:使用当前快照的查询可以在添加新的一天时安全运行,只要我们保留快照几天(比运行最长的查询时间更长)。
支持:使用历史记录的查询同样可以安全运行,只要它们显式地对最新的“结束日期”进行绑定,即在运行时排除任何过期行的后续添加。
这不仅仅是一个简单的“更新”或“覆盖”每天。实际上,在HDFS中,这通常需要通过复制和过滤来实现,所以这并不是一个真正的骗局。
Con:许多查询都需要合并这两个数据集。为了缓解这种情况,我们可以创建视图或类似的视图,将两者适当地结合起来,从而产生与选项3完全类似的东西。
Con:找到最新的快照需要找到正确的分区。这可以通过查看每次新快照可用时“翻转”到最新快照来缓解。
https://stackoverflow.com/questions/44704858
复制相似问题