#####################
## 脚本说明:定时清理指定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 执行.
1682

被折叠的 条评论
为什么被折叠?



