如何在HDFS中移动按时间排序后的最后N个或指定时间点后的文件
HDFS 批量移动指定时间范围文件解决方案
方案1:按指定时间点过滤(更适配你的需求)
你已经明确分割时间为2021-03-09 15:15,该方案过滤逻辑精准,不会出现匹配偏差:
- 第一步先验证匹配的文件数量,确认符合预期再执行移动:
# 统计符合时间要求的文件数量,输出应为8797即为匹配正确 hdfs dfs -ls /你的源目录路径 | awk '$6 >= "2021-03-09" && $7 >= "15:15" {print $NF}' | wc -l
- 验证无误后执行移动操作,用
while read逐行处理避免xargs参数过长问题:
hdfs dfs -ls /你的源目录路径 | awk '$6 >= "2021-03-09" && $7 >= "15:15" {print $NF}' | while read filePath; do hdfs dfs -mv "${filePath}" /你的目标目录路径/ done
方案2:按时间排序取最新N个文件
如果你需要直接取修改时间最新的8797个文件,用该方案即可:
- 先预览排序后的文件列表,确认路径正确:
hdfs dfs -ls /你的源目录路径 | sort -k6,6 -k7,7r | tail -8797 | awk '{print $NF}'
- 确认后执行移动:
hdfs dfs -ls /你的源目录路径 | sort -k6,6 -k7,7r | tail -8797 | awk '{print $NF}' | while read filePath; do hdfs dfs -mv "${filePath}" /你的目标目录路径/ done
常见问题说明
之前用xargs操作失效大概率是因为文件数量过多,xargs拼接后超过了系统允许的命令行参数长度上限,改用while read逐行处理可以完全规避该问题,稳定性更高。如果需要提升移动速度,可以安装GNU Parallel工具实现并行移动,集群资源紧张时不建议使用该优化。
内容的提问来源于stack exchange,提问作者Omar AlSaghier
相关产品推荐
相关产品推荐

