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

olqngx59  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(556)

我想根据文件的年龄(天数)删除hdfs中的文件。
那里的目录结构有一个固定路径,后跟id/year/month/date/hour/min作为它们的子目录。
我仍然是一个初学者,但显而易见的选择似乎是遍历每个文件夹,然后删除。
但这里我们讨论的是每小时数百万份文件。
我想知道最好的方法。

dsf9zpds

dsf9zpds1#

基于它们在java中的创建日期
不清楚“创建日期”是指文件写入hdfs的时间,还是指文件路径中的时间。我假设是文件路径。
在这里,我们讨论的是每小时数以百万计的文档
其实并不重要。您可以删除整个文件夹路径,就像常规文件系统一样。只需使用bash和hdfscli。如果您需要一些特殊的东西,那么所有cli文件系统命令都Map到java类。
从java中删除hdfs文件夹
如果使用bash,则使用 date 命令,减去天数,赋值给一个变量 d . 确保它的格式与目录结构匹配。
理想情况下,不要只计算一天。您希望在日期减法计算中计算年和月。
然后简单地移除路径中的所有内容

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

您可以在循环bash中删除许多日期:循环日期
您需要迭代其他内容的唯一原因是,如果您有要删除的动态id
另一种方法是在该数据上创建(分区的)启用了acid的配置单元表。
只需执行类似于下面的删除查询(正确考虑日期格式)

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

将它安排在cron(或oozie)任务中,让它反复清除旧数据。

相关问题