如何在HDFS指定时间戳目录下递归输出零大小文件
HDFS指定时间戳范围内空文件筛选方案
可以通过hdfs dfs命令结合awk脚本实现需求,具体命令如下:
hdfs dfs -ls -R hdfs://<DIRECTORY>/ | awk -v min_ts=20220501 -v max_ts=20221231 ' /^-/ { split($NF, path_parts, "/") ts = path_parts[length(path_parts)-1] if (ts >= min_ts && ts <= max_ts && $5 == 0) print $0 } '
命令说明
hdfs dfs -ls -R hdfs://<DIRECTORY>/:递归列出目标根路径下所有文件与目录的完整属性信息- awk逻辑:
- 仅匹配文件行(以
-开头的行,排除目录) - 从文件路径中提取倒数第二段的时间戳(对应路径结构
hdfs://<DIRECTORY>/<TIMESTAMP>/文件名) - 判断时间戳是否在20220501至20221231范围内,且文件大小(第5列)为0,满足条件则输出整行属性信息
- 仅匹配文件行(以
示例
输入示例
// <DIRECTORY>/<TIMESTAMP1> -rw-r--r-- 3 USER supergroup 0 2022-10-23 21:52 hdfs://<DIRECTORY>/20221015/part-03767.pb.zstd -rw-r--r-- 3 USER supergroup 71667 2022-10-23 21:52 hdfs://<DIRECTORY>/20221015/part-03768.pb.zstd -rw-r--r-- 3 USER supergroup 94330 2022-10-23 21:52 hdfs://<DIRECTORY>/20221015/part-03769.pb.zstd // <DIRECTORY>/<TIMESTAMP2> -rw-r--r-- 3 USER supergroup 14756 2022-10-23 21:52 hdfs://<DIRECTORY>/20221016/part-03770.pb.zstd -rw-r--r-- 3 USER supergroup 0 2022-10-23 21:52 hdfs://<DIRECTORY>/20221016/part-03771.pb.zstd
输出示例
// output -rw-r--r-- 3 USER supergroup 0 2022-10-23 21:52 hdfs://<DIRECTORY>/20221015/part-03767.pb.zstd -rw-r--r-- 3 USER supergroup 0 2022-10-23 21:52 hdfs://<DIRECTORY>/20221016/part-03771.pb.zstd
内容的提问来源于stack exchange,提问作者Bowen Peng
相关产品推荐
相关产品推荐

