当前位置: > Linux集群 > Hadoop >

hadoop hdfs java api操作实战

时间:2016-07-19 23:27来源:linux.it.net.cn 作者:IT

hadoop java api操作实战:

 

公共方法:

 

  1. static final String PATH = "hdfs://icity0:9000/";  

 

 
  1. private static FileSystem getFileSystem() throws IOException, URISyntaxException {  
  2.         FileSystem fileSystem = FileSystem.get(new URI(PATH), new Configuration());  
  3.         return fileSystem;  
  4.     }  

创建目录:

 

  1. FileSystem fileSystem = getFileSystem();  
  2.   
  3.        fileSystem.mkdirs(new Path("/wangmm1"));  

将本地文件上传到hdfs中:

 

 
  1. fileSystem.copyFromLocalFile(new Path("src/t.txt"), new Path("hdfs://icity0:9000/wangmm1/"));  

将hdfs中的文件读取到本地控制台:

 

 
  1. FSDataInputStream open = fileSystem.open(new Path("hdfs://icity0:9000/wangmm1/t.txt"));  
  2.   
  3. IOUtils.copyBytes(open, System.out, 1024, true);  

 

 

遍历hdfs上的文件夹:

 

 
  1. FileStatus[] listStatus = fileSystem.listStatus(new Path(PATH));  
  2.         for (int i = 0; i < listStatus.length; i++) {  
  3.             FileStatus fileStatus = listStatus[i];  
  4.             boolean dir = fileStatus.isDir();  
  5.             if(dir) {  
  6.                 System.out.println("文件夹"+fileStatus.getPath().toUri().getPath());  
  7.             }else{  
  8.                 System.out.println("文件"+fileStatus.getPath().toUri().getPath());  
  9.             }  
  10.         }  

打印结果:

 

文件/hello
文件夹/home
文件夹/wangmm1

 

删除目录或者文件:

 

 
  1. fileSystem.delete(new Path("/wangmm1"), true);  
如果wangmm1是目录,且目录下面存在文件,第二个参数设置为false,那么执行此方法会抛异常。

 

设置为true时,直接删除目录及其下面的所有文件。

如果删除文件:

 

 
  1. [hadoop@icity0 ~]$ hadoop fs -lsr /wangmm1  
  2. Warning: $HADOOP_HOME is deprecated.  
  3.   
  4. -rw-r--r--   3 wangmuming supergroup         18 2014-04-15 20:47 /wangmm1/t.txt  

则直接删除,

 

 

 
  1. fileSystem.delete(new Path("/wangmm1/t.txt"), true);  

第二个参数是true或者false都可以。

 


关于hadoop的java api操作还有许多方法,这里只讲解了基础的结果操作,具体的可以参考hadoop java api。



(责任编辑:IT)
------分隔线----------------------------