检查hadoop中的文件大小

时间:2016-12-16 04:08:18

标签: unix hadoop

我需要检查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

2 个答案:

答案 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