2012-07-20 11 views

答えて

17

hadoop fs -lsコマンドを使用すると、現在のディレクトリ内のファイルとその詳細を一覧表示できます。コマンド出力の5番目の列には、ファイルサイズがバイト単位で格納されます。

コマンドhadoop fs -ls inputは、次のような出力が得られます。ファイルsou

Found 1 items 
-rw-r--r-- 1 hduser supergroup  45956 2012-07-19 20:57 /user/hduser/input/sou 

サイズは45956バイトです。

+0

どのように人間が判読できる形式でサイズを出力しますか? -ls -lahはここでは機能しません –

27

また、自分自身がhadoop fs -dus <path>を使用しています。たとえば、「/ユーザ/ frylock /入力」という名前のHDFS上のディレクトリには、100個のファイルが含まれていると、あなたが実行できるこれらのファイルのすべての合計サイズが必要な場合:

hadoop fs -dus /user/frylock/input 

を、あなたは合計サイズを取り戻すだろう"/ user/frylock/input"ディレクトリ内のすべてのファイルのサイズ(バイト単位)を指定します。

また、HDFSはデータを冗長に格納するため、ファイルによって使用された実際の物理ストレージは、hadoop fs -lshadoop fs -dusで報告されているものの3倍以上になる可能性があります。

+0

最後の点に加えて、レプリケーションファクタは許可フラグの後に表示され、所有者(@ adhunavkulkarniの回答の2番目の列)の前の番号です –

+3

hadoop fs -du -s バージョン – serhanbaker

+17

はるかに読みやすい出力のために 'hadoop fs -du -s -h/user/frylock/input'を使用してください。 – axiom

2

APIで処理したい場合は、 'getFileStatus()'メソッドを使用できます。

+0

空のファイルでゼロにならないように割り当てられたブロックサイズを返すファイルサイズを返さないのは正しくありません。デフォルトは67108864です。 – user1613360

10

ファイルサイズを取得するのに役立つ以下の関数を使用しました。

public class GetflStatus 
{ 
    public long getflSize(String args) throws IOException, FileNotFoundException 
    { 
     Configuration config = new Configuration(); 
     Path path = new Path(args); 
     FileSystem hdfs = path.getFileSystem(config); 
     ContentSummary cSummary = hdfs.getContentSummary(path); 
     long length = cSummary.getLength(); 
     return length; 
    } 
} 
+0

これが7906を返したら、そのディレクトリのサイズはどうですか?それはバイト単位かkbs単位ですか? – retiremonk

4

HDFSでフィルタリングされた出力の(GBで)サイズを確認するには、awkスクリプトで以下のコマンドを参照してください:

hadoop fs -du -s /data/ClientDataNew/**A*** | awk '{s+=$1} END {printf "%.3fGB\n", s/1000000000}' 

出力---> 2.089ギガバイト

hadoop fs -du -s /data/ClientDataNew/**B*** | awk '{s+=$1} END {printf "%.3fG\n", s/1000000000}' 

出力---> 1.724GB

hadoop fs -du -s /data/ClientDataNew/**C*** | awk '{s+=$1} END {printf "%.3fG\n", s/1000000000}' 

出力---> 0.986GB

関連する問題