Как получить 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 (...).

Другие вопросы по тегам