如何列出目录中的所有文件及其在hadoop hdfs中的子目录?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (1954)

我在hdfs中有一个文件夹,它有两个子文件夹,每个文件夹都有大约30个子文件夹,最后每个文件夹都包含xml文件。我想列出只给出主文件夹路径的所有xml文件:

FileStatus[] status = fs.listStatus( new Path( args[ 0 ] ) );

但它只列出了两个第一个子文件夹,并没有更进一步。hadoop有没有办法做到这一点?

提问于
用户回答回答于

你需要使用FileSystem对象并对生成的FileStatus对象执行一些逻辑以手动递归到子目录中。

您还可以应用PathFilter,以仅使用listStatus(Path,PathFilter)方法返回xml文件

hadoop FsShell类的hadoop fs -lsr命令就是这样的例子,这是一个递归的ls - 在第590行的第590行看到源代码。

用户回答回答于

如果你使用的是hadoop 2. * API有更优雅的解决方案:

    Configuration conf = getConf();
    Job job = Job.getInstance(conf);
    FileSystem fs = FileSystem.get(conf);

    //the second boolean parameter here sets the recursion to true
    RemoteIterator<LocatedFileStatus> fileStatusListIterator = fs.listFiles(
            new Path("path/to/lib"), true);
    while(fileStatusListIterator.hasNext()){
        LocatedFileStatus fileStatus = fileStatusListIterator.next();
        //do stuff with the file like ...
        job.addFileToClassPath(fileStatus.getPath());
    }

扫码关注云+社区

领取腾讯云代金券