我有一个将代码上传到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()
谢谢, 谢尔班
答案 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();