批量删除HDFS上无效的临时文件

需求:当前日期下的临时目录不删除(可能存在正在运行的临时文件),通过日期过滤dir将非当前日期的dir进行删除

第一版

由于hdfs删除效率太低,删除一个文件需要 1-2S 完全无法忍受 PB的数据等待删除
1
2
3
4
5
6
7

for line in $(hdfs dfs -ls /user/wangping/_sqoop/ |grep -v `date +%Y-%m-%d`|awk -F ' /' '{print $2}')
do
    dir=/${line}
    echo "drop sqoop hdfs tmp dir: ${dir}"
    `hdfs dfs -rm -r ${dir}`
done

第二版

中间想一次性加载所有目录一次删除,发现我发遍历初所有待删除目录(太鸡儿多了)
通过批量执行删除脚本,一千为批次的进行删除执行时间依旧一次删除时间为1-3S左右,效率提高不是一个数量级
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20

dirs=""
size=0
for line in $(hdfs dfs -ls /user/wangping/_sqoop/ |grep -v `date +%Y-%m-%d`|awk -F ' /' '{print $2}')
do
    let "size++"
    dir=/${line}
    echo "drop sqoop hdfs tmp dir: ${size} ${dir}"
    dirs=${dirs}" "${dir}
    #echo ${size}
    if [[ `expr ${size} % 1000` == 0 ]]; then
        echo "dirs:" ${dirs}
        hdfs dfs -rm -r ${dirs}
        dirs=""
    fi
#    `hdfs dfs -rm -r ${dir}`
done

echo ${dirs}
hdfs dfs -rm -r ${dirs}

到此 批量删除的工作告一段落

涨知识: 1,shell 中的计算变量 2,shell 中的自增变量