根据Java中的创建日期删除远程hdfs中的文件和目录

时间:2018-02-06 02:11:13

标签: hadoop hdfs

我想根据年龄(没有天数)删除hdfs中的文件 目录结构有一个固定的路径,后跟id / year / month / date / hour / min作为子目录。

我仍然是初学者,但显而易见的选择看起来像遍历每个文件夹然后删除。

但在这里,我们每小时都在谈论数百万份文件 我想知道解决这个问题的最佳方法。

1 个答案:

答案 0 :(得分:0)

  

基于他们在Java中的创建日期

不清楚“创建日期”是指文件写入HDFS的时间,还是文件路径中的文件。我假设它是文件路径。

  

这里我们每小时都在谈论数百万份文件

无关紧要。您可以删除整个文件夹路径,例如常规文件系统。只需使用bash和hdfs cli。如果您需要特殊的东西,所有CLI文件系统命令都将映射到Java类。

Delete hdfs folder from java

如果使用bash,请使用date命令计算日期,减去天数,分配给变量,让我们说d。确保它的格式与目录结构相匹配。

理想情况下,不要只计算一天。您希望在日期减法计算中计算年数和月数。

然后只需删除路径中的所有内容

 hadoop fs -rm -R "${FIXED_PATH}/id/$(d}"

您可以在循环中删除许多日期 - Bash: Looping through dates

您需要迭代其他任何内容的唯一原因是,如果您有要删除的动态ID

另一种方法是在该数据上创建(分区)ACID-enabled Hive table

只需执行类似于以下的删除查询(正确计算日期格式)

DELETE FROM t 
WHERE CONCAT(year, '-', month, '-', day) < date_sub(current_date(), ${d})

在cron(或Oozie)任务中安排它,让它重复清理旧数据。