Загрузка файлов HDFS и чтение файлов в зависимости от размера байта - PullRequest
0 голосов
/ 05 мая 2019

Я пишу небольшую программу для загрузки файлов hdfs с использованием Java. Когда я запускаю код, я получаю список файлов из hdfs. А также в состоянии извлечь файлы разделов в одиночку. Теперь я хочу транслировать и читать содержимое этих разделов.

Когда я пытаюсь загрузить контент, используя FileInputStream. Загружаются абсолютные пути извлеченных разделов (например, hdfs: // localhost / hdfs / path / part-00000). Но FileInputStream в целом принимает только одну косую черту. Из-за чего абсолютный путь преобразуется в hdfs: /localhost/hdfs/path/part-00000.

Какой inturn выдает ошибку о том, что такого пути нет: ls: `hdfs: / localhost / hdfs / path / part-00000 ': такого файла или каталога нет

Но, если я ниже, я вижу путь к списку разделов:

hdfs dfs -ls hdfs: // localhost / hdfs / path / part-00000

Ниже приведен пример кода:

     Configuration conf = new Configuration();
            conf.set("fs.defaultFS",
                    "hdfs://localhost");
            FileSystem hdfs = FileSystem.get(new URI("hdfs://localhost"), conf);
            RemoteIterator<LocatedFileStatus> fsStatus = hdfs.listFiles(
                    new Path("/hdfs/path"), true);
            InputStream is = null;

            System.out.println("***** Contents of the Directory *****");

            while (fsStatus.hasNext()) {
                String path = fsStatus.next().getPath().toString();
                String str1 = path.substring(path.lastIndexOf("/") + 1);

                if (str1.matches("part.*")) {

                    try (InputStream fis = new FileInputStream(
                            path);
                            InputStreamReader isr = new InputStreamReader(
                                    fis, StandardCharsets.UTF_8);
                            BufferedReader br = new BufferedReader(isr)) {
                        System.out.println(path);
                        br.lines()
                                .forEach(line -> System.out.println(line));
                    }

                }

            }
...