2016-12-16 59 views
0

我需要检查在HDFS文件的大小,并检查文件小于10KB然后打印错误与文件名要检查文件大小在Hadoop中

​​

为Actualsize沿hadoop fs -du -h /path | cut -d" " -f1 做 如果[$ Actualsize -lt $ Minsize];然后 回声“为$ file生成的文件不正确:文件大小 - $ Actualsize KB” echo“退出脚本文件大小小于10KB” exit 1; 网络 做

获得像 整数表达式的错误预期

Moreo在我需要打印以及文件$错误地生成的文件名文件

回答

0

您可以使用HDFS的fsck命令来获得文件大小。

对于例如,当我执行fsck的HDFS的/ 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 /“ - greps for/tmp /(我们要搜索的文件夹)。这将使在/ tmp/ 的“grep -v‘’”只有文件和文件夹 - 这将删除输出目录(因为我们只想文件) 徒劳无功{打印$ 2,$ 1;}“ - 这将打印文件大小($ 2),后面跟着文件名($ 1) 排序-n - 这确实对文件的大小,然后在列表的最后一个文件数字排序应与最大尺寸的文件 可以通过管道输出到尾-1获得最大的文件。

例如,我得到的输出为:

107374182400的/ tmp/100GB /一部分-M-0000

+0

有没有办法在我自己的片段 – user2672739

+0

到modiy @ user2672739:看到你的文章的底部编辑链接 –

+0

我的意思说我想改变我的脚本,解决它的方法 – user2672739