在Hadoop HDFS中高效地存储每日转储
我认为Hadoop的一种常见使用模式是通过从操作系统加载定期(例如每天)数据快照来构建“数据湖”。对于许多系统,每天的更改率通常小于行的5%(即使更新了行,也只有少数字段可能会更改) Q:如何在HDFS上构建这样的历史数据,使其既节省空间又能高效访问。 当然,答案将取决于数据的访问方式。在我们的Hadoop集群上:在Hadoop HDFS中高效地存储每日转储,hadoop,delta,datadesign,bigdata,Hadoop,Delta,Datadesign,Bigdata,我认为Hadoop的一种常见使用模式是通过从操作系统加载定期(例如每天)数据快照来构建“数据湖”。对于许多系统,每天的更改率通常小于行的5%(即使更新了行,也只有少数字段可能会更改) Q:如何在HDFS上构建这样的历史数据,使其既节省空间又能高效访问。 当然,答案将取决于数据的访问方式。在我们的Hadoop集群上: 大多数作业仅读取和处理最新版本的数据 一些作业处理一段时间的历史数据(例如1-3个月) 一些作业处理所有可用的历史数据 这意味着,虽然保留历史数据很重要,但它不应该以严重放缓那些
- 大多数作业仅读取和处理最新版本的数据
- 一些作业处理一段时间的历史数据(例如1-3个月)
- 一些作业处理所有可用的历史数据
那么…有没有另一个结合了空间效率和易用性的选项?我建议使用选项3的一个变体,它尊重HDFS的仅附加特性 我们保留两个数据集,而不是一个数据集,其中包含不同类型的信息,分别存储:
与选项3的不同之处在于,我们认为未过期的行是与过期的不同类型的信息。 赞成:与HDFS的仅附加特性一致
赞成:使用当前快照的查询可以在添加新的一天时安全运行,只要我们将快照保留几天(比运行最长查询所需的时间更长) 赞成:使用历史记录的查询同样可以安全运行,只要它们在最新的“结束日期”上显式地给出一个界限,该界限排除了在运行过程中随后添加的过期行 缺点:这不仅仅是每天简单的“更新”或“覆盖”。在HDFS的实践中,这通常需要通过复制和过滤来实现,所以这不是一个真正的缺点 缺点:许多查询需要合并这两个数据集。为了简化这一点,我们可以创建视图或类似视图,将两者适当地结合起来,以生成与选项3完全相同的内容 缺点:查找最新快照需要找到正确的分区。这可以通过在每次有新快照可用时“滚动”到最新快照的视图来缓解