小需求:看数据源目录下所有gz压缩包的原始大小
Posted jackwang666
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了小需求:看数据源目录下所有gz压缩包的原始大小相关的知识,希望对你有一定的参考价值。
今天MR的数据源很可能出现了问题,正常每天对方服务器会推过来2.1TB数据,今天只有1.6TB。
过来是gz压缩包,FTP的方式推送,进来之后我这边的程序进行解析,并存入HDFS。
对端的工程师只能看到压缩包目录的大小,看不到压缩前文件总大小,商量了一下,觉得不好对比数据一致性,想排查数据量问题,没工具可以直接看。
虽然有个命令 gzip -l 可以看,但是只能单个文件查看,看总大小也不方便。
然后就写了这个脚本,想看哪个目录,就把脚本放在哪个目录执行即可。
vi gzip_filespace.sh
chmod +x gzip_filespace.sh
脚本内容如下:
#########################
#用于统计当前目录所有gz压缩包,在不解压情况下,确认解压后的文件量总大小及压缩率
#金峰老王制作于20200716
#########################
#!/bin/bash
ls -l *.gz|awk ‘{ary_gz_name[$NF]++}END{for(i in ary_gz_name) print "gzip -l " i,";"}‘ |bash|
grep "%"| awk ‘{print $4,"解压前 "$1/1024/1024" M","解压后 "$2/1024/1024" M","压缩率 "$3}‘ >./$(date +%F)_gz_space.log
sleep 2
cat ./$(date +%F)_gz_space.log|awk ‘{a+=$3;b+=$6}END{print "解压前总 "a/1024"G","解压后总 "b/1024"G",a/b*100"%"}‘ >>./$(date +%F)_gz_space.log
cat ./$(date +%F)_gz_space.log
简单的引入一个数组索引,将获取到的gz压缩包名字赋给数组,用索引的目的是可以将每一个gz压缩包名字放入数组内,
然后用awk,在这里使用for 遍历这个数组,打印输出想要的命令行,交给bash执行。
行处理的特性使得每一行的输出,可以再次变换为自己想要的内容,放入一个文件,也可以留存。
如果延伸一下,还可以通过每天定时任务,获取文件中内容,和其他的监测内容,放入一个日志文件中;
这样看每天看一个日志文件就了解清楚整个服务器的数据量是否正常了。
以上是关于小需求:看数据源目录下所有gz压缩包的原始大小的主要内容,如果未能解决你的问题,请参考以下文章