【问题标题】:Data retention in Hadoop HDFSHadoop HDFS 中的数据保留
【发布时间】:2023-04-10 06:48:01
【问题描述】:

我们有一个 Hadoop 集群,在 HDFS 中有超过 100TB 的数据。我想删除某些 Hive 表中超过 13 周的数据。

有什么工具或方法可以实现这一点吗?

谢谢

【问题讨论】:

  • 您使用的是哪个版本的 Hive?您是否使用任何分区?
  • Hive .13,hadoop 2.4。我需要一种方法来删除 HDFS 中的数据,因为所有配置单元表都是外部表。 Hive 数据也被分区。

标签: hadoop hdfs


【解决方案1】:

要删除早于某个时间范围的数据,您有几个选择。

首先,如果 Hive 表是按日期分区的,您可以简单地 DROP Hive 中的分区并删除它们的底层目录。

第二个选项是对新表运行 INSERT,使用日期戳(如果可用)过滤掉旧数据。这可能不是一个好的选择,因为您有 100TB 的数据。

第三种选择是递归列出 Hive 表的数据目录。 hadoop fs -lsr /path/to/hive/table。这将输出文件列表及其创建日期。您可以获取此输出,提取日期并与您想要保留的时间范围进行比较。如果文件较旧,那么您想保留,请在其上运行 hadoop fs -rm <file>

第四个选项是获取 FSImage 的副本:curl --silent "http://<active namenode>:50070/getimage?getimage=1&txid=latest" -o hdfs.image 接下来将其转换为文本文件。 hadoop oiv -i hdfs.image -o hdfs.txt。文本文件将包含 HDFS 的文本表示,与 hadoop fs -ls ... 将返回的相同。

【讨论】:

  • +1 用于 FSImage 方法,理想情况下是hadoop oiv ...,因为它绕过了名称节点——尤其是当你有大量文件时。通过一些巧妙的过滤(在我的例子中是 grep 和 awk),您可以根据您的要求获取需要删除的所有文件的列表。
  • @brandon.bell 选项 3 的实现可以在这篇文章中找到:stackoverflow.com/questions/44235019/…
猜你喜欢
  • 2013-05-31
  • 1970-01-01
  • 2023-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多