HDFS上磁盤數據清理

HDFS數據清理一些辦法:

  1. datanode數據做reblance
  2. 清理臨時目錄、日誌目錄文件
  3. 全量分區表歷史分區清理
  4. 使用lzo,orc格式進行數據壓縮
  5. 清理或者歸檔歷史冷數據
  6. 增加datanode橫向擴容

附上自動清理目錄下過期的文件

#!/bin/bash
source ~/.bash_profile



# 將待檢測的目錄(可以爲多個)加載至數組中
yarn_log_dir=/app-logs/spark/logs
spark_log_dir=/spark-history
spark2_log_dir=/spark2-history
mr_log_dir=/mr-history/done/$(date +"%Y/%m" -d "-1 days")

array_check=($yarn_log_dir $mr_log_dir)

# 過期天數
expire_days=14

# 當前時間戳
today_timestamp=$(date -d "$(date +"%Y-%m-%d %H:%M")" +%s)

#Func: 刪除指定時間之前的過期
removeOutDate(){
        hadoop fs -ls $1 > temp_list.txt
        cat temp_list.txt | while read quanxian temp user group size day hour filepath
        do
            current_file_time="$day $hour"
            current_file_timestamp=$(date -d "$current_file_time" +%s)
            if [ $(($today_timestamp-$current_file_timestamp)) -ge $(($expire_days*24*60*60)) ];then
                echo "$day $hour  $size $filepath"
                hadoop fs -rm -r -skipTrash $filepath > /dev/null 2>&1 
            fi
        done
}

#Func: 執行刪除
execute(){
        echo -e "\n\n"
        echo "$(date +'%Y-%m-%d %H:%M:%S') start to remove outdate files in hdfs"
        echo "$(date +'%Y-%m-%d %H:%M:%S') today is: $(date +"%Y-%m-%d %H:%M:%S")"

        for i in ${array_check[@]}
        do
            echo "$(date +'%Y-%m-%d %H:%M:%S') processing filepath: $i"
            removeOutDate $i
            echo -e "\n"
        done

        echo "$(date +'%Y-%m-%d %H:%M:%S') remove outdate files in hdfs finished"
        echo -e "\n\n"
        
        rm -f temp_list.txt
}

# 開始執行
execute

 

發佈了56 篇原創文章 · 獲贊 7 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章