【问题标题】:Deleting files and directories in a remote hdfs based on their creation date in Java根据Java中的创建日期删除远程hdfs中的文件和目录
【发布时间】:2018-07-16 00:13:00
【问题描述】:

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

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

但在这里,我们每小时讨论数百万份文档。
我想知道最好的方法。

【问题讨论】:

    标签: hadoop hdfs


    【解决方案1】:

    基于它们在 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)任务中,让它反复清理旧数据。

    【讨论】:

    猜你喜欢
    • 2011-01-13
    • 2013-07-30
    • 1970-01-01
    • 1970-01-01
    • 2021-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-09
    相关资源
    最近更新 更多