指定時間批量刪除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
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容