使用Java API之带进度条上传大文件(我觉得不重要)

 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 }

posted @ 2021-07-02 16:40  酱汁怪兽  阅读(284)  评论(0)    收藏  举报