shell指令碼案例 二 HDFS檔案定期清理

2021-08-21 00:15:59 字數 1613 閱讀 8753

當前環境的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 ...