1 package com.imooc.bigdata.hadoop.hdfs;
2
3 import org.apache.hadoop.conf.Configuration;
4 import org.apache.hadoop.fs.FSDataOutputStream;
5 import org.apache.hadoop.fs.FileSystem;
6 import org.apache.hadoop.fs.Path;
7 import org.apache.hadoop.io.IOUtils;
8 import org.apache.hadoop.util.Progress;
9 import org.apache.hadoop.util.Progressable;
10 import org.junit.After;
11 import org.junit.Before;
12 import org.junit.Test;
13
14 import java.io.BufferedInputStream;
15 import java.io.File;
16 import java.io.FileInputStream;
17 import java.io.InputStream;
18 import java.net.URI;
19
20 /**
21 * 使用Java API操作HDFS文件系统
22 *
23 * 因为是放在test下面,所以最好使用单元测试的方式
24 * 在pom中引入的jUnit单元测试的方式
25 * 单元测试有两个方法:(1)在单元测试之前进行;(2)在单元测试之后进行
26 *
27 * 关键点:
28 * 1)创建Configuration
29 * 2)获取FileSystem
30 * 3)剩下的是HDFS API的操作
31 */
32
33 public class HDFSApp {
34
35 public static final String HDFS_PATH = "hdfs://hadoop000:8020";
36 //Configuration、FileSystem是每一个方法使用之前必须构建的
37 Configuration configuration = null;
38 FileSystem fileSystem = null;
39
40 @Before
41 public void setup() throws Exception{
42 System.out.println("-----setup-----");
43 configuration = new Configuration();
44 configuration.set("dfs.replication", "1");
45 /*
46 *构造一个访问指定HDFS系统的客户端对象
47 * 第一个参数:HDFS的URI
48 * 第二个参数:客户端指定的配置参数
49 * 第三个参数:客户的用户名
50 */
51 fileSystem = FileSystem.get(new URI("hdfs://hadoop000:8020"), configuration, "hadoop");
52 }
53
54 /*
55 * 拷贝本地主机文件至HDFS文件系统
56 */
57 @Test
58 public void copyFromLocalBigFile() throws Exception{
59
60 InputStream in = new BufferedInputStream(new FileInputStream(new File("G:/BaiduNetdiskDownload/jdk-8u152-windows-x64.exe")));
61
62 FSDataOutputStream out = fileSystem.create(new Path("/hdfsApi/test/jdk.tgz"),
63 new Progressable(){
64 public void progress(){
65 System.out.print("1");
66 }
67 });
68
69 IOUtils.copyBytes(in, out,4096);
70 }
71
72 @After
73 public void tearDown(){
74 System.out.println("-----tearDown-----");
75
76 //置空
77 configuration = null;
78 fileSystem = null;
79 }
80 }
![]()
![]()