通常,在使用hadoop和flink时,从分布式文件系统打开/读取文件将返回扩展java.io.inputstream的源(sink的对应对象)对象。
但是,在ApacheIgnite中,igfssecondaryfilesystem,更具体地说是ignitehadoopigfssecondaryfilesystem,在调用其“open”方法(通过传递igfspath)时返回HadoopIGFSSecondaryFileSystemPositioneDable类型的对象。
hadoopigfssecondaryfilesystempositionedrable提供了一个“read”方法,但需要知道要读取的数据所在的详细信息,例如输入流的位置。
/**
* 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;
如何在调用read方法之前确定这些细节?
我对这些框架非常陌生,可能存在一种不同的方法来获取基于指向hadoop文件系统中存储的文件的igfspath的inputstream?
我正在努力实现这里所描述的目标:https://apacheignite-fs.readme.io/docs/secondary-file-system
提前谢谢你的提示!
1条答案
按热度按时间ryhaxcpt1#
igfssecondaryfilesystem接口不应直接使用。您可以将hadoop集群配置为用于读通和写通操作的辅助fs。
igfssecondaryfilesystem只能在配置中指定为filesystemconfiguration#secondaryfilesystem属性。
您应该改用文件系统接口。您可以通过调用ignite#filesystem(…)方法来获取它的示例。获得
InputStream
通过igfs路径,可以使用ignitefilesystem#open(…)方法。