统计分布式存储时数据的总大小

本文介绍了一种通过脚本自动统计分布式环境下多个节点上特定目录及其子目录数据总量的方法。涉及命令行工具如du、awk、scp等的使用,并提供了一个自动化脚本方案,包括文件大小的提取、跨节点数据汇总及结果报告。

需求:分布式存储数据时,想要知道总数据大小。


举例说明:有两台机器master95,slave98存储数据。数据存放目录是/home/hduser/test/data,data文件夹下有三个子文件夹,分别是net,socket,wap。现在需要分别统计net,socket,wap和data的数据量大小。思路:先利用du统计各节点的数据量大小,把结果发送给其中一台节点,负责汇总。完成需求。


实施


1、各存储点统计各自的文件大小,放到test.txt文件

查看文件大小命令:
ls -lht /home/hduser/test/data
或者
du -l /home/hduser/test/data 注:单位是k,du -sh /home/hduser/test/data出来结果更加方便人阅读,但由于它单位不确定,K,M,G根据数据大小而变,之后提取数据大小数值,求和时比较麻烦,故舍弃。

2、取出本文中的有效数字,放到test95.txt。

2.1 取出文本中的数字:
cat test.txt |tr -dc '[0-9]\n'
或者 sed "s/[^0-9]*$//" test.txt
或者 sed 's/\([0-9]*\)[^0-9]*/\1/' test.txt
2.2 取出文本中第一列
awk '{print $1}' test.txt > test95.txt

3、发送结果到其中一台机器做汇总,这里是slave98

这里目前想到三种办法:一利用命令scp,实现自动执行时,得配置SSH免验证;二利用sftp,密码可以直接写到脚本里,避免了配置SSH免验证(二没测试,有错误请指出);三利用zookeeper获取,zkCli.sh -server 127.0.0.1:2181 连接到zookeeper服务,create创建节点和关联字符串,set修改,get获取,具体百度哈。本例利用scp传送。

1、2、3步写一个脚本,cat filesize.sh
cd /home/hduser/test/data
du -l * > /home/hduser/test/filemanage/test.txt
cd /home/hduser/test/filemanage/
awk '{print $1}' test.txt > /home/hduser/test/filemanage/test95.txt
scp /home/hduser/test/filemanage/test95.txt hduser@slave98:/home/hduser/test/filemanage/

4、汇总,给出报告

提取需要数据,直接求和,数据较大,需要转换单位,用到除法,expr或者其他
4.1 取出文本里第N行内容
sed -n Np test95.txt
4.2 四则运算
本例使用expr,具体请看脚本。

cat filesum.sh
#95号机器net文件大小:
a1=`sed -n 1p test95.txt`
#98号机器net文件大小:
a2=`sed -n 1p test98.txt`
#计算和:
sumK1=`expr $a1 + $a2 `
sumM=`expr $sumK1 / 1024 `
echo "XXX,您好!" > report.txt
echo "这两台机器net文件总大小为:"$[ a1 + a2 ]"K,即"$sumM"M" >> report.txt

#95号机器socket文件大小:
b1=`sed -n 2p test95.txt`
#98号机器socket文件大小:
b2=`sed -n 2p test98.txt`
#计算和:
sumK2=`expr $b1 + $b2 `
sumM=`expr $sumK2 / 1024 `
echo "这两台机器socket文件总大小为:"$[ b1 + b2 ]"K,即"$sumM"M" >> report.txt

#95号机器wap文件大小:
b1=`sed -n 3p test95.txt`
#98号机器wap文件大小:
b2=`sed -n 3p test98.txt`
#计算和:
sumK3=`expr $b1 + $b2 `
sumM=`expr $sumK3 / 1024 `
echo "这两台机器wap文件总大小为:"$[ b1 + b2 ]"K,即"$sumM"M" >> report.txt

#总共文件大小为:
sum=$[sumK1 + sumK2 +sumK3 ]
echo "总共文件大小为:"$sum"K。" >> report.txt

5、利用crontab定时执行任务

定时先执行filesize.sh,后执行filesum.sh,也可以定时将结果发送到指定邮箱。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值