Подтвердить что ты не робот

Чтение HDFS и локальных файлов в Java

Я хочу читать пути к файлам независимо от того, являются ли они HDFS или локальными. В настоящее время я передаю локальные пути с файлом префикса://и HDFS с префиксом hdfs://и напишу некоторый код в качестве следующего

Configuration configuration = new Configuration();
FileSystem fileSystem = null;
if (filePath.startsWith("hdfs://")) {
  fileSystem = FileSystem.get(configuration);
} else if (filePath.startsWith("file://")) {
  fileSystem = FileSystem.getLocal(configuration).getRawFileSystem();
}

Отсюда я использую API файловой системы для чтения файла.

Не могли бы вы сообщить мне, есть ли другой лучший способ?

4b9b3361

Ответ 1

Это имеет смысл,

public static void main(String[] args) throws IOException {

    Configuration conf = new Configuration();
    conf.addResource(new Path("/hadoop/projects/hadoop-1.0.4/conf/core-site.xml"));
    conf.addResource(new Path("/hadoop/projects/hadoop-1.0.4/conf/hdfs-site.xml"));

    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    System.out.println("Enter the file path...");
    String filePath = br.readLine();

    Path path = new Path(filePath);
    FileSystem fs = path.getFileSystem(conf);
    FSDataInputStream inputStream = fs.open(path);
    System.out.println(inputStream.available());
    fs.close();
}

Вам не нужно ставить эту проверку, если вы идете этим путем. Получите FileSystem прямо из Path, а затем сделайте все, что вам нравится.

Ответ 2

Вы можете получить FileSystem следующим образом:

Configuration conf = new Configuration();
Path path = new Path(stringPath);
FileSystem fs = FileSystem.get(path.toUri(), conf);

Вам не нужно судить, начинается ли путь с hdfs:// или file://. Этот API выполнит эту работу.