HDFS 目录中的文件计数
在Java代码中,我想连接到HDFS中的目录,了解该目录中的文件数量,获取它们的名称并希望读取它们。我已经可以读取文件,但我无法弄清楚如何计算目录中的文件并像普通目录一样获取文件名。
为了阅读,我使用DFSClient并将文件打开到输入流中。
在Java代码中,我想连接到HDFS中的目录,了解该目录中的文件数量,获取它们的名称并希望读取它们。我已经可以读取文件,但我无法弄清楚如何计算目录中的文件并像普通目录一样获取文件名。
为了阅读,我使用DFSClient并将文件打开到输入流中。
计数
Usage: hadoop fs -count [-q] <paths>
计算与指定文件模式匹配的路径下的目录、文件和字节数。输出列为:DIR_COUNT、FILE_COUNT CONTENT_SIZE FILE_NAME。
带有 -q 的输出列为:配额、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。
您只需使用文件系统并循环访问路径中的文件即可。下面是一些示例代码
int count = 0;
FileSystem fs = FileSystem.get(getConf());
boolean recursive = false;
RemoteIterator<LocatedFileStatus> ri = fs.listFiles(new Path("hdfs://my/path"), recursive);
while (ri.hasNext()){
count++;
ri.next();
}
要进行快速简单的计数,您还可以尝试以下单行:
hdfs dfs -ls -R /path/to/your/directory/ | grep -E '^-' | wc -l
快速说明:
grep -E '^-'
或 : Grep 所有文件: 文件以 '-' 开头,而文件夹以 'd' 开头;egrep '^-'
wc -l
:行数。