HDFSディレクトリ内のファイル数

Javaコードで、HDFSのあるディレクトリに接続し、そのディレクトリにあるファイルの数を知り、ファイル名を取得して読み込みたいと思います。すでにファイルを読むことはできるのですが、普通のディレクトリのようにディレクトリ内のファイルを数えてファイル名を取得する方法が分かりませんでした。

そこで、DFSClientを使って、ファイルをInputStreamにオープンしています。

カウント

Usage: hadoop fs -count [-q] <paths>

指定されたファイルパターンにマッチするパス下のディレクトリ、ファイル、バイトの数を数える。出力されるカラムは以下の通り。 dir_count, file_count, content_size file_name。

** -q の出力カラムは次のとおりです。 quota, remaining_quata, space_quota, remaining_space_quota, dir_count, file_count, content_size, file_name。

例:

hadoop fs -count hdfs://nn1.example.com/file1 hdfs://nn2.example.com/file2
hadoop fs -count -q hdfs://nn1.example.com/file1

**終了コード

成功時0、エラー時-1を返す。

FileSystemを使用して、パス内のファイルを反復処理することができます。以下はサンプルコードです

int count = 0;
FileSystem fs = FileSystem.get(getConf());
boolean recursive = false;
RemoteIterator ri = fs.listFiles(new Path("hdfs://my/path"), recursive);
while (ri.hasNext()){
    count++;
    ri.next();
}
解説 (3)
FileSystem fs = FileSystem.get(conf);
Path pt = new Path("/path");
ContentSummary cs = fs.getContentSummary(pt);
long fileCount = cs.getFileCount();
解説 (0)

コマンドラインでは、以下のように実行します。

 hdfs dfs -ls $parentdirectory | awk '{system("hdfs dfs -count " $6) }'
解説 (1)