HDFS开发实例

1、列出HDFS中的文件

 1 package com.hdfs.test;
 2 
 3 import java.io.BufferedReader;
 4 import java.io.IOException;
 5 import java.io.InputStream;
 6 import java.io.InputStreamReader;
 7 import java.net.URI;
 8 import org.apache.hadoop.conf.Configuration;
 9 import org.apache.hadoop.fs.FSDataInputStream;
10 import org.apache.hadoop.fs.FileStatus;
11 import org.apache.hadoop.fs.FileSystem;
12 import org.apache.hadoop.fs.FileUtil;
13 import org.apache.hadoop.fs.Path;
14 
15 public class AccessHdfs {
16     public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException{
17         
18         //以下两句仅用于在windows下访问服务器中的HDFS时,解决特定的错误问题
19         System.setProperty("hadoop.home.dir", "C:/Users/learn/Desktop/hadoopfiles");
20         System.setProperty("HADOOP_USER_NAME","hadoop");
21         
22         Configuration conf = new Configuration();    
23         
24         //conf.set("fs.defaultFS", "hdfs://192.168.1.215:9000");
25         //FileSystem fS = FileSystem.get(conf);
26         //如果不在conf中设置,可以这样写:
27         FileSystem fS = FileSystem.get(URI.create("hdfs://192.168.1.215:9000"), conf);
28                 
29         //列出目录
30         String dir = "/";
31         FileStatus[] fileStatus = fS.listStatus(new Path(dir));
32         Path[] list = FileUtil.stat2Paths(fileStatus);
33         for(Path path : list){
34             System.out.println(path.toString());
35         }
36         fS.close();                
37     }
38             
39 }

注:

1> 如果出现了java.io.IOException: Could not locate executable null\bin\winutils.exe in the Hadoop binaries 这种错误,可以通过设置设置HADOOP_HOME 环境变量来解决,在本例中,即使用System.setProperty("hadoop.home.dir", "C:/Users/learn/Desktop/hadoopfiles");这句代码,除此之外,还需要在设置的路径C:/Users/learn/Desktop/hadoopfiles中建立一个bin文件夹,并从网络上下载winutils.exe文件,放到这个bin文件夹中。至于所设置的路径,不必包含真正的hadoop文件。

2> System.setProperty("HADOOP_USER_NAME","hadoop");这句用于设置用户名,这是因为在linux中Hadoop系统的所有者被设置为hadoop用户,在windows下访问时可以这样显式的指定,如果没有指定,系统会将windows系统的当前用户作为访问Hadoop系统的用户,出现类似Permission denied的错误。

3> 当打包成jar文件时,以上两句是不需要的。

4> FileSystem用来获取文件系统的一个实例,FileStatus包含了文件中的元数据

 

2、创建目录与删除目录

 1 Configuration conf = new Configuration();    
 2 FileSystem fS = FileSystem.get(URI.create("hdfs://192.168.1.215:9000"), conf);
 3                 
 4 //创建目录
 5 fS.mkdirs(new Path("TestData"));
 6 fS.mkdirs(new Path("/DataWorld"));
 7         
 8 //删除目录,如果是空的路径,可以忽略第二个参数
 9 fS.delete(new Path("TestData"),true);    
10         
11 fS.close();        

 注意上传的路径,如果没有指定根目录,则是/user/用户名/目录名

 

3、上传文件与读取文件

 1 Configuration conf = new Configuration();            
 2 FileSystem fS = FileSystem.get(URI.create("hdfs://192.168.1.215:9000"), conf);        
 3 
 4 //上传文件
 5 Path src = new Path("C:/Users/learn/Desktop/hadoopfiles/Test.txt");
 6 Path dst = new Path("TestData");
 7 fS.copyFromLocalFile(src, dst);        
 8         
 9 //读取文件
10 String filedir = "TestData/Test.txt";
11 FSDataInputStream file = fS.open(new Path(filedir));
12 BufferedReader in = null;
13 String line;
14 in =new BufferedReader(new InputStreamReader(file, "UTF-8"));
15 while ((line = in.readLine()) != null) {
16     System.out.println(line);            
17 }
18 if(in !=null){
19     in.close();
20 }

 也可以打包成jar文件运行

 

posted @ 2016-12-03 03:56  learn21cn  阅读(1091)  评论(0编辑  收藏  举报