HDFS的API对Hadoop文件系统的文件进行写入

 

http://yjhexy.javaeye.com/blog/561720

可以通过FileSystem类的静态get方法来获取HDFS文件系统的实例,FileSystem的实例实现了很多对于文件操作的函数,如上次介绍的open方法,当然,FileSystem也实现了文件写入操作的函数了.我们可以通过调用create方法来在hdfs文件系统中建立一个文件,create方法返回一个FSDataOutputStream的实例,FSDataOutputStream是继承自java.io.DataOutputStream的类,因此,通过FileSystem的create方法返回的FSDataOutputStream的实例就可以进行文件的写操作了.我们来看一个简单的例子:

 

import org.apache.hadoop.conf.*; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.hdfs.*; import org.apache.hadoop.fs.*; public class HDFSWriteHelloWorld { public static void main(String[] args) throws Exception{ String str = "Hello world"; Configuration configuration = new Configuration(); FileSystem fs = FileSystem.get(configuration); java.io.OutputStream out = fs.create(new Path("/helloworld")); out.write(str.getBytes()); out.flush(); out.close(); } } 

 

程序的功能很简单,在hdfs文件系统的根目录中创建一个helloworld文件,然后将”Hello world”字符串写入该文件.

值得一提的是FileSystem还提供了append方法,将程序稍加修改改成如下样子看看什么效果?

 

import org.apache.hadoop.conf.*; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.*; public class HDFSWriteHelloWorld { public static void main(String[] args) throws Exception{ String str = "Hello world"; Configuration configuration = new Configuration(); FileSystem fs = FileSystem.get(configuration); java.io.OutputStream out = fs.create(new Path("/helloworld")); out.write(str.getBytes()); out.flush(); out.close(); out = fs.append(new Path("/helloworld")); out.write(str.getBytes()); out.flush(); out.close(); } } 

 

run之发现如下错误:

Exception in thread "main" java.lang.UnsupportedOperationException: HDFS does not support append yet

at org.apache.hadoop.hdfs.DistributedFileSystem.append(DistributedFileSystem.java:179)

at org.apache.hadoop.fs.FileSystem.append(FileSystem.java:533)

at HDFSWriteHelloWorld.main(HDFSWriteHelloWorld.java:16)

 

原来HDFS还没有实现append方法.(注:使用的版本是hadoop-0.19.1,没有在最新的hadoop-0.20中测试)

对于HDFS文件系统,目前最主要的应用是结合Hadoop的map-reduce框架对大文件进行处理,更多是数据挖掘和数据分析的应用,因此,HDFS提供了基于key-value的SequenceFile的File-based的文件结构和以及MapFile对文件操作进行优化,相信随着Hadoop以及HDFS的完善,HDFS文件系统会提供更多更方便的文件操作.

 

你可能感兴趣的:(hadoop)