shell脚本实现删除hdfs下n天前的数据 您所在的位置:网站首页 linux删除一周前的文件记录 shell脚本实现删除hdfs下n天前的数据

shell脚本实现删除hdfs下n天前的数据

2023-07-29 09:32| 来源: 网络整理| 查看: 265

问题描述

今天上班的时候,突然发现集群的内存仅剩50G了 查看管理界面才发现是9台机器宕掉了 报错log-dir are bad 猜测应该是数据打满了 一看果然是,9台机器上的存储空间都达到了90%以上 百度了一下发现,如果集群的存储达到90%以上就会变成不可用状态 应该是每天sqoop全量导数据导致的 删一删呗,但是也不能每天手动删除吧,那多累 写个脚本来搞一下

问题解决 #! /bin/bash tt=`date -d "8 day ago" +%Y-%m-%d` tt1=`date -d $tt +%s` hdfs dfs -ls hdfs://xxxxxxx/user/hive/warehouse/ods.db/*/ | grep dt\= | awk '{print $NF}' | while read file do # 切割出日期 file_dt=${file#*=} #echo $file_dt # 将日期转换成数字 file_dt_num=$(date -d ${file_dt} +%s) #echo $file_dt_num # 删除7天之前的数据 if [ $file_dt_num -le $tt1 ];then echo $file" was deleted" fi done

记得还要加上一句清空回收站的命令,否则删了数据还是占空间 测试的时候别清空回收站,否则删错了就没法找回了

优化版本:

#! /bin/bash tt=`date -d "8 day ago" +%Y-%m-%d` tt1=`date -d $tt +%s` hdfs dfs -ls hdfs://xxxxxx/user/hive/warehouse/ods.db/*/ | grep dt\= | awk '{print $NF}' | while read file do # 切割出日期 file_dt=${file#*=} #echo $file_dt # 将日期转换成数字 file_dt_num=$(date -d ${file_dt} +%s) #echo $file_dt_num # 删除7天之前的数据 if [ $file_dt_num -le $tt1 ];then echo $file echo $file_dt >> file_dt_temp.txt fi done cat file_dt_temp.txt | sort -u | while read file_dt do echo "hadoop fs -rmr hdfs://xxxxxx/user/hive/warehouse/ods.db/*/dt=${file_dt}" done rm file_dt_temp.txt


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有