【问题标题】:org.apache.hadoop.fs.Path is not list all s3 files on unix EC2org.apache.hadoop.fs.Path 未列出 unix EC2 上的所有 s3 文件
【发布时间】:2021-12-28 04:06:15
【问题描述】:

我正在使用 Flink 并在 s3 存储桶上读取/写入 parquet 文件。

我的窗口代码是列出业务文件夹下的所有拼花文件并获取文件列表。

            Path file = new Path("C:\\tmp\\business");
            List<String> fileList= listFileInDir(file.toString());

当在 unix box 上移动相同的代码时,它对于单个文件(完整路径)工作正常,但是没有读取 s3 文件夹下的所有 parquet 文件列表并且在文件列表中获取 null(尝试了所有 s3、s3a 和 s3n)

            Path file = new Path("s3n://java-filink-vkhan/parquet");
            List<String> fileList= listFileInDir(file.toString());

方法将路径读取为字符串

        public List<String> listFileInDir(String path) {

            List<String> results = new ArrayList<String>();

            File[] files = new File(path).listFiles();
            // If this pathname does not denote a directory, then listFiles() returns null.
         if(null != files) {
            for (File file : files) {
                if (file.isFile()) {
                    results.add(file.getName());
                }
            }
         }
            return results;

        }

【问题讨论】:

    标签: hadoop aws-java-sdk-2.x


    【解决方案1】:

    S3 在目录中列出文件时特别糟糕(慢)。这与 S3 如何实现其文件目录有关。如果您需要速度,您实际上应该在数据库中对 [您写入的文件] 和 [您写入它们的位置] 进行自己的“核算”。这也是亚马逊自己建议修复HDFS lookups for hive。 (他们建议使用 dynamoDB,它用于帮助提供一致性,但也解决了查找缓慢的问题。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-24
      • 2017-01-06
      • 1970-01-01
      • 2020-05-13
      • 1970-01-01
      • 2017-07-13
      • 2014-06-16
      • 2015-05-10
      相关资源
      最近更新 更多