Как получить InputStream при открытии IgnitePath (возвращает HadoopIgfsSecondaryFileSystemPositionedReadable)?
Обычно при работе с Hadoop и Flink открытие / чтение файла из распределенной файловой системы возвращает объект Source (аналог Sink), расширяющий java.io.InputStream.
Однако в Apache Ignite, IgfsSecondaryFileSystem и, более конкретно, IgniteHadoopIgfsSecondaryFileSystem, возвращает объект типа HadoopIgfsSecondaryFileSystemPositionedReadable при вызове их метода "open" (путем передачи IgfsPath).
HadoopIgfsSecondaryFileSystemPositionedReadable предлагает метод "чтения", но ему необходимо знать подробности о том, где расположены данные, предназначенные для чтения, такие как позиция входного потока.
/**
* Read up to the specified number of bytes, from a given position within a file, and return the number of bytes
* read.
*
* @param pos Position in the input stream to seek.
* @param buf Buffer into which data is read.
* @param off Offset in the buffer from which stream data should be written.
* @param len The number of bytes to read.
* @return Total number of bytes read into the buffer, or -1 if there is no more data (EOF).
* @throws IOException In case of any exception.
*/
public int read(long pos, byte[] buf, int off, int len) throws IOException;
Как определить эти детали перед вызовом метода чтения?
Я довольно новичок в этих инфраструктурах и, возможно, существует другой способ получения InputStream на основе IgfsPath, указывающего на файл, хранящийся в файловой системе Hadoop?
Я пытаюсь добиться того, что описано здесь: https://apacheignite-fs.readme.io/docs/secondary-file-system
Заранее спасибо за любую подсказку!
1 ответ
Интерфейс IgfsSecondaryFileSystem не должен использоваться напрямую. Вы можете настроить свой кластер Hadoop для использования в качестве вторичной FS для операций чтения и записи.
IgfsSecondaryFileSystem следует указывать в конфигурации только как свойство FileSystemConfiguration# primaryFileSystem.
Вместо этого вы должны использовать интерфейс IgniteFileSystem. Вы можете получить его экземпляр, вызвав метод Ignite # fileSystem (...). Чтобы приобрести InputStream
по пути IGFS вы можете использовать метод IgniteFileSystem # open (...).