自动定时清理指定hdfs目录下指定的文件脚本

#####################
## 脚本说明:定时清理指定hdfs目录下,当前时间几天前的文件
## 清理 时间:请调整 delayDate  变量中 "10" 数字
## 清理 路径 :请调整 arrlogFile 变量中的值
#####################
#!/bin/bash
export HADOOP_USER_NAME=hdfs #设置操作hdfs代理用户
#======================定义全局变量 begin===========================
#日志保留天数
delayDate=10 
#清理日志在hdfs的目录 支持多个目录扫描,目录地址以""包含,多个路径以空格隔开.
arrlogFile=("/tmp/hive")
outPath=/tmp/hive/hive 
#echo ${arrlogFile[0]}
now=$(date +%s) #获取当前运行时间
#======================定义全局变量 end=============================

#循环迭代配置的扫描目录 启动多个线程扫描任务
for ((i=0;i<${#arrlogFile[@]};i++)) 
do
{
  #echo ${arrlogFile[$i]}
  #列出hdfs对应目录下的文件路径信息
  hadoop fs -ls  ${arrlogFile[$i]} | grep "^d" | while read f; do
       currentFile=`echo $f| awk '{ print $8 }'`
       if [ "$outPath" != "$currentFile" ];then
         echo '扫描路径--->'$currentFile
         hadoop fs -ls `echo $f| awk '{ print $8 }'`| grep "^d" |while read fc;do
                dir_date=`echo $fc | awk '{print $6}'`
                #当前时间与文件的时间只差,换算成天
                difference=$(( ( $now - $(date -d "$dir_date" +%s) ) / (24 * 60 * 60 ) )) 
                #计算比较日志保留天数
                if [ $difference -gt $delayDate ]; then 
                #打印待删除的目录信息,
                #echo $fc
                #删除目录
                hadoop fs -rm -r -skipTrash  `echo $f| awk '{ print $8 }'`;  #此处直接对上边的过滤结果进行删除,建议先改成 hadoop fs -ls -R 命令先进行测试,一切正常在改回删除。
                #hadoop fs -ls -R  `echo $fc| awk '{ print $8 }'`;
               fi
         done
       fi
    done
} & 
done
wait
echo "清理结束"


#直接通过命令 ./cleanHiveTmp.sh或sh cleanHiveTmp.sh 执行.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值