Java 通用文件系统的FileInputStream

Java 通用文件系统的FileInputStream,java,filesystems,hdfs,Java,Filesystems,Hdfs,我有一个包含java序列化对象(如“Vector”)的文件。我已经通过Hadoop分布式文件系统(HDFS)存储了这个文件。现在我打算在一个map任务中读取这个文件(使用readObject方法)。我想 FileInputStream in = new FileInputStream("hdfs/path/to/file"); 由于文件存储在HDFS上,因此无法工作。所以我想到使用org.apache.hadoop.fs.FileSystem类。但不幸的是,它没有任何返回FileInputSt

我有一个包含java序列化对象(如“Vector”)的文件。我已经通过Hadoop分布式文件系统(HDFS)存储了这个文件。现在我打算在一个map任务中读取这个文件(使用readObject方法)。我想

FileInputStream in = new FileInputStream("hdfs/path/to/file");
由于文件存储在HDFS上,因此无法工作。所以我想到使用org.apache.hadoop.fs.FileSystem类。但不幸的是,它没有任何返回FileInputStream的方法。它所拥有的只是一个返回FSDataInputStream的方法,但我想要一个inputstream,它可以从文件中读取序列化的java对象,比如vector,而不仅仅是FSDataInputStream可以执行的基本数据类型

请帮忙

无法方便地直接读取序列化对象。你需要把它包起来。你也可以这样做,只需将它包装成,然后你就可以从中读取你的对象

换句话说,如果您有
org.apache.hadoop.fs.fileSystem
类型的
文件系统
,只需使用:

ObjectInputStream in = new ObjectInputStream(fileSystem.open(path));

您需要像这样转换FSDataInputStream(scala代码)


使用CDH5会导致错误
fcont=hfs.FileContext.getFileContext();f=fcont.open(hfs.Path('/tmp/test.txt');ois=java.io.ObjectInputStream(f)java.io.StreamCorruptedException:java.io.StreamCorruptedException:invalid stream header:6C6F6700@Andor当前位置我也遇到了同样的异常情况,几天来我一直在努力寻找解决方案,但运气不佳。你能找出问题出在哪里吗?我的Java专家同事说这是不可能的,所以我寻找了另一种方法,那就是HDFS的NFS网关。虽然我确信,如果接口是合适的,那么它也应该工作。
val hadoopConf = new org.apache.hadoop.conf.Configuration()
val hdfs = org.apache.hadoop.fs.FileSystem.get(new     java.net.URI("hdfs://nameserv"), hadoopConf)

val in = hdfs.open(new org.apache.hadoop.fs.Path("hdfs://nameserv/somepath/myfile")).asInstanceOf[java.io.InputStream]