在hadoop中检查文件大小

ykejflvf  于 2021-05-29  发布在  Hadoop
关注(0)|答案(2)|浏览(597)

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

获取类似整数表达式的错误
我需要打印文件名以及文件生成错误的$文件

qyyhg6bp

qyyhg6bp1#

获取类似整数表达式的错误
那是因为你用了这个选项 -hdu 命令和-h选项将以“人类可读”的方式格式化文件大小(例如64.0m而不是67108864)。test命令无法识别这种“人类可读”的方式。更改为 Minsize=10240 省去了 -h .
我需要打印文件名以及文件生成错误的$文件
为此,必须从第三列读取文件名。

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
ltskdhd1

ltskdhd12#

您可以使用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;}'|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部分

相关问题