【问题标题】:hdfs list and select the latest updated fileshdfs 列表并选择最新更新的文件
【发布时间】:2021-11-13 05:47:44
【问题描述】:

试图找到一个解决方案来获取 HDFS 文件列表中的最新更新数据。

解释:

hdfs dfs -ls -l /tmp/workday1/list/date=20170101/

上面的命令显示了文件夹内的文件列表以及相应的属性,如所有者、权限、更新时间等。

date=20170101目录一样还有其他日期的目录,每天的数据加载都有它的日期目录。但在旧日期目录中更新的文件不一定是旧日期。今天运行的进程,如果包含一些旧日期的文件,只会将这些文件放在旧日期的文件夹中。

我需要弄清楚,一旦加载完成,我会创建一个今天更新的所有文件的列表。我唯一的限制是我只需要根据更新的时间戳属性来解决这个问题。文件名不包含任何日期因素。

有什么建议吗?

【问题讨论】:

  • 基于代码的解决方案是否可行,还是应该仅基于外壳?
  • 这只是我希望的基于外壳的。在这里通过一个基于 java 的解决方案,但这会使我的整个包复杂化。
  • Grep 约会...你关心小时、分钟、秒吗?

标签: hadoop hdfs hadoop2


【解决方案1】:

我以错误的方式接近它;以下是我对此的回答。

hdfs dfs -ls -t -r -R -d ${path-to-hdfs-area}/date*/ | grep $currentDate | awk '{print $8}'

上面的命令会给出目录列表,如果需要文件列表加上目录,我们可以去掉-d选项。

hdfs dfs -ls -t -r -R ${path-to-hdfs-area}/date*/ | grep $currentDate | awk '{print $8}'

在哪里,currentDate=date +%Y-%m-%d

【讨论】:

    【解决方案2】:
    hadoop fs -ls -t <hadoop_path> 
        | grep <todays_Date> 
        | awk '{print $(NF)}' 
        | awk -F/'{print $7}' 
        | awk -F='{print $2}' 
        | uniq
    

    【讨论】:

    • 欢迎来到 Stack Overflow,感谢您提供答案。您能否编辑您的答案以包括对您的代码的解释?这将帮助未来的读者更好地理解正在发生的事情,尤其是那些不熟悉该语言并努力理解这些概念的社区成员。当已经有社区验证的答案时,这一点尤其重要。在什么条件下你的方法可能更受欢迎?您是否在利用新功能?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多