批量删除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 中的自增变量