셸 스 크 립 트 사례 (2): HDFS 파일 정기 정리
케이스
hdfs 의 공간 점용 률 을 정기 적 으로 검사 하고 95% 를 넘 으 면 최초 5 일의 로그 파일 을 삭제 합 니 다.
해결 방향
스 크 립 트 작성
#!/bin/bash
# dfs ,
day=5
limit=95
basedir=/app/applogs
logfile=/app/scripts/logs/clear_hdfs_logs.log
logger(){
msg=$1
cdate=$(date +%F)
ctime=$(date '+%F %T')
echo "$ctime $1" >> ${logfile}_$cdate
}
find_logs(){
n=$1
# find year
lasted_year=$(hdfs dfs -ls $basedir |awk -F'/' 'NR>1{print $NF}' |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{print $NF}' |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{print $NF}' |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 -eq 0 ];then
rm_empty $basedir_month
fi
n2=$(hdfs dfs -ls $basedir_year |wc -l)
if [ $n2 -eq 0 ];then
rm_empty $basedir_year
fi
}
rm_logs() {
target=$1
logger "clear old logs: hdfs dfs -rm -r -skipTrash $target"
hdfs dfs -rm -r -skipTrash $target
}
rm_empty() {
target=$1
logger "clear empty dir: hdfs dfs -rm -r -skipTrash $target"
hdfs dfs -rm -r -skipTrash $target
}
disk_used=$(hdfs dfsadmin -report|awk -F':|%' 'NR==5 {print $3}')
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
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
ZSH에서 물고기까지ZSH는 수년 동안 내 기본 셸이었습니다. 이제 몇 달 동안 사용하면서 ZSH 구성에 대해 몇 가지 사항을 발견했습니다. 우리는 을 제공하는 시스템과 더 빨리 상호 작용하는 경향이 있습니다. 내.zshrc 구성에는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.