如何删除多个HDFS目录中最新创建的文件?

问题描述 投票:0回答:1

我犯了一个错误,并在按日期划分的表中添加了几百个零件文件。我能够看到哪些文件是新文件(这些是我要删除的文件)。我在这里看到的大多数情况都与删除早于特定日期的文件有关,但是我只想删除我最近的文件。

有一整天,我可能有3个文件,我只想删除新文件。当我使用hadoop fs -ls

时,由于更新时间戳,我可以说它是新的
/this/is/my_directory/event_date1_newfile_20191114
/this/is/my_directory/event_date1_oldfile_20190801
/this/is/my_directory/event_date1_oldfile_20190801

我有很多日期,所以我必须为event_date2,event_date3等完成此操作,始终从每个日期中删除'new_file_20191114'。

较早的日期是从2019年8月开始,而我的新文件已于昨天11/14/19更新。

我觉得应该有一个简单/快速的解决方案,但是我很难找到大多数人所问的相反情况。

hadoop hive hdfs hql hadoop-partitioning
1个回答
0
投票

正如您在回答中提到的那样,您已经获得了需要删除的文件列表。创建一个简单的脚本,将输出重定向到临时文件

喜欢这样

hdfs dfs -ls /tmp | sort -k6,7 > files.txt

请注意对-k6,7进行排序,这将给出所有文件,但按时间戳的排序顺序。我确定您不想删除所有文件,因此可以选择需要删除的前n个文件,例如100

然后您可以将命令更新为

hdfs dfs -ls /tmp | sort -k6,7 | head -100> files.txt

然后读取该文件并一一删除所有文件

while read file; do
  hdfs -rm $file
  echo "Deleted $file" >> deleted_files.txt #this is to track which files have been deleted

done <files.txt

所以您完成的脚本可以像

#!/bin/bash

 hdfs dfs -ls /tmp | sort -k6,7 | head -100> files.txt

 while read file; do
     hdfs -rm $file
     echo "Deleted $file" >> deleted_files.txt #this is to track which files have been deleted

   done <files.txt
© www.soinside.com 2019 - 2024. All rights reserved.