當前環境的hdfs的空間使用率,即將達到95%,手動清理比較繁瑣,需要寫個指令碼定期清理下最早5天的日誌量。方法之一:
定期檢查hdfs的空間佔用率,若超過95%,則刪除最早5天的日誌檔案。
設定使用率閾值
查詢當前使用率,若達到閾值,查詢出最早5天的檔案
將查詢到的檔案刪除
linux shell可以用find通過時間來查詢檔案,但hdfs shell 的find引數似乎不能用時間來查詢。因此需要先將dfs ls下的檔案進行時間排序。就可以找出最早的檔案了.
hdfs dfs rm用來刪除檔案,這個命令是將檔案移動到**站,**站同樣占用空間。使用-skiptrash引數可以直接永久刪除。
#!/bin/bash
# 檢查dfs磁碟空間,清理過期日誌
day=5
limit=95
logger
()_$cdate
}find_logs
()' |sort -n|head -n1)
logger "lasted year: $lasted_year"
# find month
basedir_year=$basedir/$lasted_year
lasted_month=$(hdfs dfs -ls $basedir_year |awk -f'/'
'nr>1' |sort -n|head -n1)
logger "lasted_month: $lasted_month"
# find day
basedir_month=$basedir_year/$lasted_month
lasted_days=$(hdfs dfs -ls $basedir_month |awk -f'/'
'nr>1' |sort -n|head -n$n)
for i in
$lasted_days
do rm_logs $basedir_month/$i
done
# check empty dir, and delete
n1=$(hdfs dfs -ls $basedir_month |wc -l)
if [ $n1
-eq0 ];then
rm_empty $basedir_month
fi n2=$(hdfs dfs -ls $basedir_year |wc -l)
if [ $n2
-eq0 ];then
rm_empty $basedir_yearfi}
rm_logs
() rm_empty
() disk_used=$(hdfs dfsadmin -report|awk -f':|%'
'nr==5 ')
if [ $(echo
"$disk_used > $limit"|bc) -eq
1 ];then
logger "current: $disk_used %, $limit +"
find_logs $day
else
logger "current: $disk_used %, $limit -, exit "
fi
shell指令碼案例
bin bash for迴圈的使用 for num in 1 2 3 4 5 6 do echo num done bin bash a whoami read p 請輸入想要驗證的使用者名稱 b if b a then echo 是當前使用者 else echo 不是當前使用者,需示警 fi bi...
shell指令碼案例賞析
bin bash 用法 rebatch.sh 截止到月份的日期 例如 rebatch.sh 2014 06 etc profile bashrc arg 1 start date 01 end date 01 count 1 cat dev null log file db2 o connect t...
shell指令碼案例(提供思路)
1 define the execution environment of the script 定義指令碼的執行環境 執行指令碼用英文 usr bin bash 2 號代表注釋 是特例 3 指令碼資訊 author tang xiaoming created time 2019 05 07 11 ...