我需要检查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
获得错误 期望整数表达式
Moreo over我需要打印文件名以及文件生成错误的$ file
答案 0 :(得分:0)
您可以使用hdfs fsck命令获取文件大小。
例如,当我执行hdfs fsck / tmp / -files时,我得到以下输出:
/tmp <dir>
/tmp/100GB <dir>
/tmp/100GB/Try <dir>
/tmp/100GB/Try/1.txt 5 bytes, 1 block(s): OK
/tmp/100GB/_SUCCESS 0 bytes, 0 block(s): OK
/tmp/100GB/part-m-00000 107374182400 bytes, 800 block(s): OK
/tmp/100GB/part-m-00001._COPYING_ 44163923968 bytes, 330 block(s):
/tmp/10GB <dir>
/tmp/10GB/_SUCCESS 0 bytes, 0 block(s): OK
/tmp/10GB/part-m-00000 10737418300 bytes, 81 block(s): OK
/tmp/1GB <dir>
/tmp/1GB/_SUCCESS 0 bytes, 0 block(s): OK
/tmp/1GB/part-m-00000 1073741900 bytes, 9 block(s): OK
/tmp/1GB/part-m-00001 1073741900 bytes, 9 block(s): OK
它以递归方式列出/ tmp下的所有文件及其大小。
现在,要解析具有最大大小的文件,您可以执行以下命令:
hdfs fsck / tmp / -files | grep“/ tmp /”| grep -v“”| gawk'{print $ 2,$ 1;}'|排序-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 / part-m-0000
答案 1 :(得分:0)
获取类似整数表达式的错误
这是因为您使用了du
命令的选项-h
,并且 -h选项将以“人类可读”的方式格式化文件大小(例如64.0m而不是67108864 )。测试命令无法识别这种“人类可读”的方式。更改为Minsize=10240
,然后忽略-h
。
Moreo我需要打印文件名以及为$ file错误生成的文件
为此,您必须从第三列中读取文件名。
Minsize=10240
hadoop fs -du /path | while read Actualsize _ file
do
if [ $Actualsize -lt $Minsize ]; then
echo "File generated incorrectly for $file: Filesize - $Actualsize"
echo "Exiting from Script file size found less than 10 KB"
exit 1
fi
done