Я пишу небольшую программу для загрузки файлов 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));
}
}
}