我需要检查在hdfs文件的大小,并检查文件是否小于10kb,然后打印错误与文件名
Minsize=10
for Actualsize in `hadoop fs -du -h /path | cut -d" " -f1`
do
if [ $Actualsize -lt $Minsize ]; then
echo "File generated incorrectly for $file : Filesize - $Actualsize KB "
echo "Exiting from Script file size found less than 10KB"
exit 1;
fi
done
获取类似整数表达式的错误
我需要打印文件名以及文件生成错误的$文件
2条答案
按热度按时间qyyhg6bp1#
获取类似整数表达式的错误
那是因为你用了这个选项
-h
的du
命令和-h选项将以“人类可读”的方式格式化文件大小(例如64.0m而不是67108864)。test命令无法识别这种“人类可读”的方式。更改为Minsize=10240
省去了-h
.我需要打印文件名以及文件生成错误的$文件
为此,必须从第三列读取文件名。
ltskdhd12#
您可以使用hdfs fsck命令来获取文件大小。
例如,当我执行hdfs fsck/tmp/-files时,我得到以下输出:
它递归地列出/tmp下的所有文件及其大小。
现在,要解析出最大大小的文件,可以执行以下命令:
hdfs fsck/tmp/-files | grep“/tmp/”| grep-v“| gawk'{print$2,$1;}'|sort-n此命令执行以下操作:
hdfs fsck/tmp/-files-它对/tmp/文件夹运行hdfs文件系统检查,并为/tmp/grep“/tmp/”下的每个文件查找报告-它为/tmp/(我们要搜索的文件夹)greps。这将只提供/tmp/“grep-v”下的文件和文件夹-这将从输出中删除目录(因为我们只需要文件)gawk'{print$2,$1;}'-这将打印文件大小($2),后跟文件名($1)sort-n-这将对文件大小进行数字排序,并且列表中的最后一个文件应该是具有最大大小的文件。您可以通过管道将输出传输到tail-1以获取最大的文件。
例如,我得到的输出为:
107374182400/tmp/100gb/第m-0000部分