一脸懵逼学习hadoop之HDFS的java客户端编写

1:eclipse创建一个项目,然后导入对应的jar包:

鼠标右击项目,点击properties或者alt+enter快捷键--->java build path--->libraries--->add library--->user library--->next--->user libraries--->new--->hdfsLib(根据自己的需要填写)---》add external jars(添加自己的需求包):

2:开始添加自己的需求包,路径如

  hadoop-2.4.1\share\hadoop\hdfs的hadoop-hdfs-2.4.1.jar和hadoop-2.4.1\share\hadoop\hdfs\lib下面的全部包;

  hadoop-2.4.1\share\hadoop\common的hadoop-common-2.4.1.jar和hadoop-2.4.1\share\hadoop\common\lib下面的全部包;

  1 package com.master01;
  2 
  3 import java.io.FileInputStream;
  4 import java.io.IOException;
  5 import java.net.URISyntaxException;
  6 
  7 import org.apache.commons.io.IOUtils;
  8 import org.apache.hadoop.conf.Configuration;
  9 import org.apache.hadoop.fs.FSDataOutputStream;
 10 import org.apache.hadoop.fs.FileStatus;
 11 import org.apache.hadoop.fs.FileSystem;
 12 import org.apache.hadoop.fs.LocatedFileStatus;
 13 import org.apache.hadoop.fs.Path;
 14 import org.apache.hadoop.fs.RemoteIterator;
 15 
 16 public class HdfsTest {
 17 
 18     
 19     //public FileSystem fs = null;
 20     /*
 21     @Before
 22     public void init() throws IOException, InterruptedException, URISyntaxException{
 23         //读配置文件
 24         Configuration conf = new Configuration();
 25         //这里直接拷贝配置或者直接设置值
 26         conf.set("fs.defaultFS", "hdfs://master:9000/");
 27         
 28         //获取配置文件里面的内容
 29         fs = FileSystem.get(conf);
 30         //fs = FileSystem.get(new URI("hdfs://master:9000"), conf, "root");
 31     }
 32     */
 33     
 34     
 35     /**
 36      * 上传文件
 37      * @throws IOException 
 38      */
 39     public static void upload() throws IOException{
 40         //读配置文件
 41         //读取classpath下的core-site.xml配置文件,并且解析其的内容,封装到conf的对象中;
 42         Configuration conf = new Configuration();
 43         //这里直接拷贝配置或者直接设置值
 44         //也可以在代码中对conf的配置信息进行手动设置,会覆盖配置文件中的配置信息
 45         conf.set("fs.defaultFS", "hdfs://master:9000");
 46         
 47         //获取配置文件里面的内容
 48         //根据配置信息,去获取一个具体文件系统的客户端操作实例对象
 49         FileSystem fs = FileSystem.get(conf);
 50         //本地文件是输入流,hdfs是输出流
 51         
 52         //先搞出路径
 53         Path src = new Path("hdfs://master:9000/aa/test.txt");
 54         //搞出输出流,即向hdfs上面写内容
 55         FSDataOutputStream create = fs.create(src);
 56         
 57         //输入流就是读,本地文件,输入流
 58         FileInputStream fileInputStream = new FileInputStream("d:/test.txt");
 59         
 60         //将文件fileInputStream到create即完成上传到hdfs
 61         IOUtils.copy(fileInputStream, create);
 62     }
 63     
 64     
 65     //最快的上传文件的方法
 66     public void upload02() throws IllegalArgumentException, IOException, InterruptedException, URISyntaxException{
 67         //读配置文件
 68         Configuration conf = new Configuration();
 69         //这里直接拷贝配置或者直接设置值
 70         conf.set("fs.defaultFS", "hdfs://master:9000");
 71         
 72         //获取配置文件里面的内容
 73         FileSystem fs = FileSystem.get(conf);
 74         //FileSystem fs = FileSystem.get(new URI("hdfs://master:9000"), conf, "root");
 75         fs.copyFromLocalFile(new Path("d:/test.txt"), new Path("hdfs://master:9000/aa/test.txt"));
 76     }
 77     
 78     
 79     /**
 80      * 下载文件
 81      * @throws IOException 
 82      * @throws IllegalArgumentException 
 83      */
 84     public void download02() throws IllegalArgumentException, IOException{
 85         //去配置文件
 86         Configuration conf = new Configuration();
 87         conf.set("fs.defaultFS", "hdfs://master:9000");
 88         
 89         //获取配置文件里面的内容
 90         FileSystem fs = FileSystem.get(conf);
 91         fs.copyToLocalFile(new Path("hdfs://master:9000/aa/test.txt"), new Path("d:/test2.txt"));
 92         
 93     }
 94     
 95     /***
 96      * 创建文件夹的方法
 97      * @throws IOException 
 98      */
 99     public void mkdir02() throws IOException{
100         //主配置文件
101         Configuration conf = new Configuration();
102         //设置配置文件的值
103         conf.set("fs.defaultFS", "hdfs://master:9000");
104         //获取配置文件里面的内容
105         FileSystem fs = FileSystem.get(conf);
106         
107         //文件夹的创建
108         fs.mkdirs(new Path("hdfs://master:9000/aaa/bbb/ccc"));
109     }
110     
111     
112     /**
113      * 删除文件
114      * @throws IOException 
115      */
116     public void remove02() throws IOException{
117         //主配置文件
118         Configuration conf = new Configuration();
119         //设置值
120         conf.set("fs.defaultFS", "hdfs://master:9000");
121         //获取配置文件里面的内容
122         FileSystem fs = FileSystem.get(conf);
123         
124         //执行删除操作
125         fs.delete(new Path("hdfs://master:9000/aaa/bbb/ccc"), true);
126     }
127     
128     /**
129      * 文件的移动
130      * @throws IOException 
131      */
132     public void move() throws IOException{
133         //主配置文件
134         Configuration conf = new Configuration();
135         //设置值
136         conf.set("fs.defaultFS", "hdfs://master:9000");
137         //获取配置文件里面的内容
138         FileSystem fs = FileSystem.get(conf);
139         
140         //移动操作
141         fs.rename(new Path("hdfs://master:9000/aa/test.txt"), new Path("hdfs://master:9000/aaa/bbb"));
142     }
143     
144     /***
145      * 查看文件的信息
146      * @throws IOException 
147      */
148     public void listFiles() throws IOException{
149         //主配置文件
150         Configuration conf = new Configuration();
151         //设置值
152         conf.set("fs.defaultFS", "hdfs://master:9000");
153         //获取配置文件里面的内容
154         FileSystem fs = FileSystem.get(conf);
155                 
156         //查看的是文件,不是文件夹
157         //listFiles列出的是文件信息,而且提供递归遍历
158         RemoteIterator<LocatedFileStatus> listFiles = fs.listFiles(new Path("hdfs://master:9000/"), true);
159         //迭代输出信息
160         while(listFiles.hasNext()){
161             LocatedFileStatus file = listFiles.next();
162             //文件路径
163             Path path = file.getPath();
164             System.out.println(path.getName());
165         }
166         
167         System.out.println("=============================================");
168         //listStatus列出文件和文件夹的信息,但是不提供自带的递归遍历
169         FileStatus[] listStatus = fs.listStatus(new Path("hdfs://master:9000/"));
170         /*for(int i = 0 ; i<listStatus.length; i++){
171             System.out.println(listStatus[i]);
172         }*/
173         for(FileStatus fileStatus : listStatus){
174             //根据获取的路径获取文件夹的名称
175             Path path = fileStatus.getPath();
176             System.out.println(path.getName());
177         }
178         
179     }
180     
181     public static void main(String[] args) {
182         HdfsTest hdfsTest = new HdfsTest();
183         try {
184             //上传文件的调用
185             //hdfsTest.upload02();
186             
187             //下载文件的调用
188             //hdfsTest.download02();
189             
190             //文件夹的创建
191             //hdfsTest.mkdir02();
192             
193             //删除操作
194             //hdfsTest.remove02();
195             
196             //移动文件的操作
197             //hdfsTest.move();
198             
199             //查看文件信息
200             hdfsTest.listFiles();
201         } catch (Exception e) {
202             e.printStackTrace();
203         }
204     }
205 
206 }

3:NameNode的职责

(1):维护元数据的信息;

(2):维护hdfs的目录树;

(3):响应客户端的请求;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值