指定时间批量删除hdfs中hive的session目录

[root@xxxxx ~]# hadoop fs -du -h /tmp | grep G
1.9 G    /tmp/eventlog
92.7 G   /tmp/hive
#!/bin/bash
usage='Usage: dir_diff.sh [days]'

if [ ! "$1" ]
then
    echo $usage
    exit 1
# 这里还需要检查下是否是两位以下正整数
fi

days=$1
now=$(date +%s)
seconeds_a_day=$[24 * 60 * 60]
# 删除此时间之前的数据
last_day_second=$[$now - $days * $seconeds_a_day]
echo '当前本地时间:' `date`
echo '删除截止时间:' `date -d "1970-01-01 UTC $last_day_second seconds"`
echo "保留文件天数: $days"
hadoop fs -ls /tmp/hive/ | grep "^d" | grep -v /tmp/hive/.hive-staging_hive_ | awk '{print $8}' | while read base_dir; do
    dirs_array=()
    echo "声明数组"
    index=0
    while IFS= read -r f; do
        dir_date=`echo $f | awk '{print $6}'`
        if [ $last_day_second -gt $(date -d "$dir_date" +%s) ]; then
            dir_addr=`echo $f | awk '{ print $8 }'`
            dirs_array[$index]=$dir_addr
            let index+=1;
#            echo $dir_date $dir_addr
        fi
    done < <(hadoop fs -ls $base_dir | grep "^d")
    if [ ${#dirs_array[*]} -gt 0 ]
    then
        echo "超时的文件夹个数:" $base_dir": "${#dirs_array[*]}
        hadoop fs -rm -R -skipTrash ${dirs_array[*]}
    else
        echo "没有符合要求的文件夹": $base_dir
    fi
done
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容