셸 스 크 립 트 사례 (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에 따라 라이센스가 부여됩니다.