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

11 篇文章 0 订阅
7 篇文章 0 订阅

问题描述

今天上班的时候,突然发现集群的内存仅剩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
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Antgeek

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值