Чтение 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 файловой системы для чтения файла.
Не могли бы вы сообщить мне, есть ли другой лучший способ?
Ответы
Ответ 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 выполнит эту работу.