Java Hadoop FileSystem对象为File对象

时间:2015-08-07 09:30:09

标签: java hadoop amazon-s3

我有一个将代码上传到S3的Java代码示例

 File f = new File("/home/myuser/test");

    TransferManager transferManager  = new TransferManager(credentials);
    MultipleFileUpload upload = transferManager.uploadDirectory("mybucket","test_folder",f,true);

我实际上想从HDFS上传到S3。我不想做任何复杂的事情,所以我想知道我是否可以使用我已有的代码。那么有没有办法将Hadoop FileSystem对象转换为File对象?像这样:

FileSystem fs = ... // file system from hdfs path
File f = fs.toFile()

谢谢, 谢尔班

1 个答案:

答案 0 :(得分:1)

如果要使用File类,除了将HDFS文件下载到本地文件系统之外别无他法。原因是File只能代表硬盘上的本地文件。但是,从Java 7开始,您可以使用Path对象在HDFS上获取文件的输入流:

Configuration conf = new Configuration
// set the hadoop config files
conf.addResource(new Path("HADOOP_DIR/conf/core-site.xml"));
conf.addResource(new Path("HADOOP_DIR/conf/hdfs-site.xml"));

Path path = new Path("hdfs:///home/myuser/test")
FileSystem fs = path.getFileSystem(conf);
FSDataInputStream inputStream = fs.open(path)
// do what ever you want with the stream

fs.close();