hdfs文件压缩

由于历史日志的多年积攒,集群的资源十分紧张,而且有一些日志对线上意义已经不大了,所以部分日志需要清除,部分需要压缩,释放资源。

删除日志

hadoop fs -rm -r /user/hdfs/rsync/2017*/*.txt

*为通配,该命令慎用,建议多次测试之后使用

压缩日志

第一次尝试使用hdfs上自带的归档命令进行操作

hadoop archive -archiveName 最终生成的文件名.har -p 需要归档的文件或文件夹,可多写 最终生成的文件路径
例如:hadoop archive -archiveName rsync_2018.har -p /user/hdfs/rsync aaa/2018* bbb/2018* /archive/rsync

这个命令其实就是将你以前的日志文件都归档到一个文件夹下,但是有一个缺点就是,不会保留以前的文件夹名称,这点很坑,上图吧

原始数据

在这里插入图片描述
归档后
在这里插入图片描述
由于后期可能还会溯源,所以这种方式只能pass掉了。

后来采用的是先将hdfs日志文件拉到本地

hadoop fs -get /user/hdfs/rsync/2018-01* /home/cronjob/wpq/hdfs/rysnc

如果数据量不大,可以考虑一次拉取一年的数据,数据量大的话就别这样操作,会影响hdfs的读写,接着在本地使用命令压缩,压缩比1:6

#! /bin/bash
echo " startTime: "+  `date "+%Y-%m-%d %H:%M:%S"`
dir=/home/cronjob/wpq/hdfs/rysnc

for file in $dir/*
do
    if [ -d $file ]
        then
            for file2 in $file/*
            do
                if [[ $file2 == *txt ]]
                    then
                    tar --warning=no-file-changed -zcvP -f $file2'.gz' $file
                    rm -rf $file2
                    echo $file2" COMPRESS SUCCESS"
                fi
            done
    fi
done
echo " endTime: "+  `date "+%Y-%m-%d %H:%M:%S"`

最后将压缩后的文件上传到hdfs目标目录下,测试没问题之后,删除原始目录文件

hadoop fs -put /home/cronjob/wpq/hdfs/rysnc/* /user/hdfs/rsync
hadoop fs -rm -r /user/hdfs/rsync/2018*/*.txt

希望对有类似需求的同学有所帮助,也可以用代码去压缩。
但是,有一点:压缩方案千万种,数据安全第一条。校验不充分,自己两行泪。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值