蓝晶灵 发表于 2017-12-18 11:42:12

Hadoop HDFS编程 API入门系列之HdfsUtil版本2(七)

1 import org.junit.Before;  

2 import org.junit.Test;  

3  
4 package zhouls.bigdata.myWholeHadoop.HDFS.hdfs1;
  
5
  
6 import java.io.FileInputStream;
  
7 import java.io.FileNotFoundException;
  
8 import java.io.FileOutputStream;
  
9 import java.io.IOException;
  
10 import java.net.URI;
  
11
  
12 import org.apache.commons.io.IOUtils;
  
13 import org.apache.hadoop.conf.Configuration;
  
14 import org.apache.hadoop.fs.FSDataInputStream;
  
15 import org.apache.hadoop.fs.FSDataOutputStream;
  
16 import org.apache.hadoop.fs.FileStatus;
  
17 import org.apache.hadoop.fs.FileSystem;
  
18 import org.apache.hadoop.fs.LocatedFileStatus;
  
19 import org.apache.hadoop.fs.Path;
  
20 import org.apache.hadoop.fs.RemoteIterator;
  
21 import org.junit.Before;
  
22 import org.junit.Test;
  
23

  
24 public>  
25   
  
26   FileSystem fs = null;
  
27
  
28   
  
29   @Before//@Before是在所拦截单元测试方法执行之前执行一段逻辑,读艾特Before
  
30   public void init() throws Exception{
  
31         
  
32         //读取classpath下的xxx-site.xml 配置文件,并解析其内容,封装到conf对象中
  
33         Configuration conf = new Configuration();
  
34         
  
35         //也可以在代码中对conf中的配置信息进行手动设置,会覆盖掉配置文件中的读取的值
  
36         conf.set("fs.defaultFS", "hdfs://HadoopMaster:9000/");
  
37         
  
38         //根据配置信息,去获取一个具体文件系统的客户端操作实例对象
  
39         fs = FileSystem.get(new URI("hdfs://HadoopMaster:9000/"),conf,"hadoop");
  
40         
  
41         
  
42   }
  
43   
  
44   
  
45   
  
46   /**
  
47      * 上传文件,比较底层的写法
  
48      *
  
49      * @throws Exception
  
50      */
  
51   @Test//@Test是测试方法提示符,一般与@Before组合使用
  
52   public void upload() throws Exception {
  
53
  
54         Configuration conf = new Configuration();
  
55         conf.set("fs.defaultFS", "hdfs://HadoopMaster:9000/");
  
56         
  
57         FileSystem fs = FileSystem.get(conf);
  
58         
  
59         Path dst = new Path("hdfs://HadoopMaster:9000/aa/qingshu.txt");
  
60         
  
61         FSDataOutputStream os = fs.create(dst);
  
62         
  
63         FileInputStream is = new FileInputStream("c:/qingshu.txt");
  
64         
  
65         IOUtils.copy(is, os);
  
66         
  
67
  
68   }
  
69
  
70   /**
  
71      * 上传文件,封装好的写法
  
72      * @throws Exception
  
73      * @throws IOException
  
74      */
  
75   @Test//@Test是测试方法提示符,一般与@Before组合使用
  
76   public void upload2() throws Exception, IOException{
  
77         
  
78         fs.copyFromLocalFile(new Path("c:/qingshu.txt"), new Path("hdfs://HadoopMaster:9000/aaa/bbb/ccc/qingshu2.txt"));
  
79         
  
80   }
  
81   
  
82   
  
83   /**
  
84      * 下载文件
  
85      * @throws Exception
  
86      * @throws IllegalArgumentException
  
87      */
  
88   @Test//@Test是测试方法提示符,一般与@Before组合使用
  
89   public void download() throws Exception {
  
90         
  
91         fs.copyToLocalFile(new Path("hdfs://HadoopMaster:9000/aa/qingshu2.txt"), new Path("c:/qingshu2.txt"));
  
92
  
93   }
  
94
  
95   /**
  
96      * 查看文件信息
  
97      * @throws IOException
  
98      * @throws IllegalArgumentException
  
99      * @throws FileNotFoundException
  
100      *
  
101      */
  
102   @Test//@Test是测试方法提示符,一般与@Before组合使用
  
103   public void listFiles() throws FileNotFoundException, IllegalArgumentException, IOException {
  
104
  
105         // listFiles列出的是文件信息,而且提供递归遍历
  
106         RemoteIterator<LocatedFileStatus> files = fs.listFiles(new Path("/"), true);
  
107         
  
108         while(files.hasNext()){
  
109            
  
110             LocatedFileStatus file = files.next();
  
111             Path filePath = file.getPath();
  
112             String fileName = filePath.getName();
  
113             System.out.println(fileName);
  
114            
  
115         }
  
116         
  
117         System.out.println("---------------------------------");
  
118         
  
119         //listStatus 可以列出文件和文件夹的信息,但是不提供自带的递归遍历
  
120         FileStatus[] listStatus = fs.listStatus(new Path("/"));
  
121         for(FileStatus status: listStatus){
  
122            
  
123             String name = status.getPath().getName();
  
124             System.out.println(name + (status.isDirectory()?" is dir":" is file"));
  
125            
  
126         }
  
127         
  
128   }
  
129
  
130   /**
  
131      * 创建文件夹
  
132      * @throws Exception
  
133      * @throws IllegalArgumentException
  
134      */
  
135   @Test//@Test是测试方法提示符,一般与@Before组合使用
  
136   public void mkdir() throws IllegalArgumentException, Exception {
  
137
  
138         fs.mkdirs(new Path("/aaa/bbb/ccc"));
  
139         
  
140         
  
141   }
  
142
  
143   /**
  
144      * 删除文件或文件夹
  
145      * @throws IOException
  
146      * @throws IllegalArgumentException
  
147      */
  
148   @Test//@Test是测试方法提示符,一般与@Before组合使用
  
149   public void rm() throws IllegalArgumentException, IOException {
  
150
  
151         fs.delete(new Path("/aa"), true);
  
152         
  
153   }
  
154
  
155   
  
156   public static void main(String[] args) throws Exception {
  
157
  
158         Configuration conf = new Configuration();
  
159         conf.set("fs.defaultFS", "hdfs://HadoopMaster:9000/");
  
160         
  
161         FileSystem fs = FileSystem.get(conf);
  
162         
  
163         FSDataInputStream is = fs.open(new Path("/jdk-7u65-linux-i586.tar.gz"));
  
164         
  
165         FileOutputStream os = new FileOutputStream("c:/jdk7.tgz");
  
166         
  
167         IOUtils.copy(is, os);
  
168   }
  
169   
  
170   
  
171   
  
172 }
页: [1]
查看完整版本: Hadoop HDFS编程 API入门系列之HdfsUtil版本2(七)