2016-12-16 66 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