一脸懵逼学习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):响应客户端的请求;

时间: 2024-10-26 00:39:59

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

HDFS的JAVA客户端编写

HDFS的shell操作很简单,直接查看文档就可以,和Linux指令类似,下面简单总结一下HDFS的JAVA客户端编写. 如图建立工程,其中客户端放在hdfs包下面: 需要导包,在hadoop的share文件夹下面,里面会找到不同的jar包.我把我的贴出来供大家参考: 剩下的就是编写客户端代码了.在Linux下面编写不会有那么多问题,但是在windows下面会莫名其妙各种错误,下面会提到. 首先看core-site.xml文件: <?xml version="1.0" encod

一脸懵逼学习Hadoop中的MapReduce程序中自定义分组的实现

1:首先搞好实体类对象: write 是把每个对象序列化到输出流,readFields是把输入流字节反序列化,实现WritableComparable,Java值对象的比较:一般需要重写toString(),hashCode(),equals()方法 1 package com.areapartition; 2 3 import java.io.DataInput; 4 import java.io.DataOutput; 5 import java.io.IOException; 6 7 im

HDFS的Java客户端操作代码(HDFS的查看、创建)

1.HDFS的put上传文件操作的java代码: 1 package Hdfs; 2 3 import java.io.FileInputStream; 4 import java.io.FileNotFoundException; 5 import java.io.IOException; 6 import java.net.URI; 7 8 import org.apache.hadoop.conf.Configuration; 9 import org.apache.hadoop.fs.F

Hadoop2.4.1 HDFS的Java客户端开发

我是在linux的环境下的Eclipse中开发这个程序的,如果你是在windows环境下写这个程序,请自行调整. 第一步:首先我们确定自己的hadoop的hdfs的环境是好的,我们在linux中启动hdfs,然后在web页面上通过URL测试:http://uatciti:50070 第二步:在Linux下打开Eclipse, 写我们的客户端代码. 说明:我们在Linux系统的/usr/local/devtool/java文件下,有JDK的文件.我们希望把这个文件上传到hdfs系统的根目录下的jd

一脸懵逼学习oracle(图形化界面操作---》PLSQL图形化界面)

1:经过几天的折腾,终于将oracle安装成功,创建用户,授权等等操作,接下来就安安心心学习oracle: 安装好PLSQL图形化界面和汉化以后(过程自己百度吧,百度more and more),登录图形化界面的时候就是这个B样: 2:登录成功以后就是这个B样: 左侧有三栏,自己根据需要自己拉查看信息就可以了,比如这样: 3:新建一个数据表: 点击新建然后就是这个样子的:起好数据表名称 新建数据表的列是这样子的: 4:插入数据是这样子的: 插入数据是这个样子的,点对号保存数据,点提交进行事务提交

一脸懵逼学习KafKa集群的安装搭建--(一种高吞吐量的分布式发布订阅消息系统)

1:KafKa的官方网址:http://kafka.apache.org/ 开发流程图,如: 2:KafKa的基础知识: 2.1:kafka是一个分布式的消息缓存系统2.2:kafka集群中的服务器都叫做broker2.3:kafka有两类客户端,一类叫producer(消息生产者),一类叫做consumer(消息消费者),客户端和broker服务器之间采用tcp协议连接2.4:kafka中不同业务系统的消息可以通过topic进行区分,而且每一个消息topic都会被分区,以分担消息读写的负载2.

一脸懵逼学习Java操作Excel之POI(Apache POI)

Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能. 1:下面简单的程序来创建一个空白Microsoft Excel工作簿. 请记住一定要引入jar包,切记:http://poi.apache.org/download.html 如:poi-3.9-20121203.jar 1 package com.bie; 2 3 import java.io.FileOutputStream; 4 import

一脸懵逼学习Struts数据校验,数据回显,模型驱动,防止表单重复提交。

1:Struts2表单数据校验: (1)前台校验,也称之为客户端校验,主要是通过Javascript编程的方式进行数据的验证. (2)后台校验,也称之为服务器校验,这里指的是使用Struts2通过xml配置的方式进行表单数据的校验. (3)代码方式验证Action中所有的方法:代码方式验证Action中指定的方法:xml方式验证Action中所有的方法:xml方式验证Action中指定的方法: 2:代码方式验证Action中所有的方法(自己记得导jar包和我配置web.xml文件,自己脑补吧):

一脸懵逼学习Linux的Shell编程

1:什么是Shell??? (1)Shell是用户与内核进行交互操作的一种接口,目前最流行的Shell称为bash Shell(2)Shell也是一门编程语言<解释型的编程语言>,即shell脚本(3)一个系统可以存在多个shell,可以通过cat /etc/shells命令查看系统中安装的shell,不同的shell可能支持的命令语法是不相同的 2:Shell脚本的执行方式: (1)第一种:输入脚本的绝对路径或相对路径首先要赋予+x权限:[[email protected] test]# c