HDFS中JAVA API的使用

  

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的使用