HDFS是一个分布式文件系统,既然是文件系统,就可以对其文件进行操作,比如说新建文件,删除文件,读取文件内容等操作。下面记录一下使用JAVA API对HDFS中的文件进行操作的过程。
对分HDFS中的文件操作主要涉及一下几个类:
配置类:该类的对象封转了客户端或者服务器的配置。
文件系统类:该类的对象是一个文件系统对象,可以用该对象的一些方法来对文件进行操作.FileSystem fs=FileSystem.get(参看);通过文件系统的静态方法获得获得该对象。
FSDataInputStream和FSDataOutputStream:这两个类是HDFS中的输入输出流。分别通过文件系统开放的方法和制造方法获得。
具体如何对文件操作清下下面例子:
包com.hdfs; 进口java.io.FileInputStream; 进口java.io.IOException; 进口java.io.InputStream; 进口org.apache.hadoop.conf.Configuration; 进口org.apache.hadoop.fs.FSDataOutputStream; 进口org.apache.hadoop.fs.FileStatus; 进口org.apache.hadoop.fs.FileSystem; 进口org.apache.hadoop.fs.Path; 进口org.apache.hadoop.io.IOUtils; 公开课HdfsTest {//创建新文件 公共静态空它仅仅(字符串dst, byte[]内容)抛出IOException { 配置配置=new配置(); 文件系统fs=FileSystem.get(设计); 路径dstPath=new路径(dst);//目标路径//打开一个输出流 FSDataOutputStream outputStream=fs.create (dstPath); outputStream.write(内容); outputStream.close (); fs.close (); System.out.println(“文件创建成功!”); }//上传本地文件 公共静态空虚还是(src的字符串,字符串dst)抛出IOException { 配置配置=new配置(); 文件系统fs=FileSystem.get(设计); 路径srcPath=new路径(src);//原路径 路径dstPath=new路径(dst);//目标路径//调用文件系统的文件复制函数,前面参数是指是否删除原文件,真正为删除,默认为假 fs。copyFromLocalFile(假,srcPath dstPath);//打印文件路径 system . out。println(“上传”+ conf.get (fs.default.name ")); system . out。println(“- - - - - - - - - - - -文件- - - - - - - - - - - -”+“\ n”); FileStatus [] FileStatus=fs.listStatus (dstPath); (FileStatus文件:FileStatus) { System.out.println (file.getPath ()); } fs.close (); }//文件重命名 oldName公共静态空重命名(字符串,字符串新名称)抛出IOException { 配置配置=new配置(); 文件系统fs=FileSystem.get(设计); 路径在媒介=new路径(oldName); 路径newPath=new路径(新名称); 布尔isok=fs。重命名(媒介、newPath); 如果(isok) { system . out。println(“重命名好的!”); 其他}{ system . out。println(“重命名失败”); } fs.close (); }//删除文件 公共静态空间删除(字符串filePath)抛出IOException { 配置配置=new配置(); 文件系统fs=FileSystem.get(设计); 路径路径=new路径(filePath); 布尔isok=fs.deleteOnExit(路径); 如果(isok) { system . out。println(“删除好!”); 其他}{ system . out。println(“删除失败”); } fs.close (); }//创建目录 公共静态孔隙mkdir (String路径)抛出IOException { 配置配置=new配置(); 文件系统fs=FileSystem.get(设计); 路径srcPath=new路径(路径); 布尔isok=fs.mkdirs (srcPath); 如果(isok) { system . out。println(“创造dir好!”); 其他}{ system . out。println(“创建dir失败”); } fs.close (); }//读取文件的内容 公共静态孔隙readFile(字符串filePath)抛出IOException { 配置配置=new配置(); 文件系统fs=FileSystem.get(设计); 路径srcPath=new路径(filePath); InputStream=零; 尝试{ 在=fs.open (srcPath); IOUtils。copyBytes(在系统。4096,假);//复制到标准输出流 最后}{ IOUtils.closeStream(的); } } 公共静态void main (String [] args)抛出IOException {//测试上传文件//还是(“D: \ \ c。txt”、“/user/hadoop/测试/?;//测试创建文件/* byte[]内容=" hello world世界你好\ n”.getBytes (); 它仅仅(“/user/hadoop/test1/d.txt”,内容);*///测试重命名//重命名(“/user/hadoop/测试/d。txt”、“/user/hadoop/测试/dd.txt”);//测试删除文件//删除(“测试/dd.txt”);//使用相对路径//删除(test1);//删除目录//测试新建目录//mkdir (test1);//测试读取文件 readFile (“test1/d.txt”); } }HDFS中JAVA API的使用