HDFSファイルのサイズを見つける方法HDFS内のファイルのサイズを見つけるために使用するコマンド。
hadoop fs -ls
コマンドを使用して、現在のディレクトリ内のファイルとその詳細を一覧表示できます。コマンド出力の5番目の列には、バイト単位のファイルサイズが含まれています。
例えばコマンドhadoop fs -ls input
は、次の出力を提供します。
Found 1 items
-rw-r--r-- 1 hduser supergroup 45956 2012-07-19 20:57 /user/hduser/input/sou
ファイルsou
のサイズは45956バイトです。
また、hadoop fs -dus <path>
を非常に多く使用しています。たとえば、「/ user/frylock/input」という名前のHDFS上のディレクトリに100個のファイルが含まれており、実行できるすべてのファイルの合計サイズが必要な場合:
hadoop fs -dus /user/frylock/input
「/ user/frylock/input」ディレクトリ内のすべてのファイルの合計サイズ(バイト単位)を取得します。
また、HDFSはデータを冗長に保存するため、ファイルで使用される実際の物理ストレージは、hadoop fs -ls
およびhadoop fs -dus
で報告されるものの3倍以上になる可能性があることに注意してください。
ファイルサイズを取得するのに役立つ以下の関数を使用しました。
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;
}
}
HDFSでフィルター処理された出力のサイズ(GB)を確認するには、awkスクリプトを使用して以下のコマンドを参照してください。
hadoop fs -du -s /data/ClientDataNew/**A*** | awk '{s+=$1} END {printf "%.3fGB\n", s/1000000000}'
出力---> 2.089GB
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
APIを介してそれを行いたい場合は、「getFileStatus()」メソッドを使用できます。
hdfs dfs -du -s -h /directory
これは人間が読めるバージョンです。それ以外の場合は、悪い単位で与えられます(わずかに大きい)