0

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

我的窗口代码是列出业务文件夹下的所有镶木地板文件并获取文件列表。

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

当在 unix 框中移动相同的代码时,它对于单个文件(完整路径)工作正常,但是没有读取 s3 文件夹下的所有镶木地板文件并在文件列表中获取 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;

        }
4

1 回答 1

0

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

于 2022-01-04T15:20:09.407 回答