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下面的全部包;

 package com.master01;

 import java.io.FileInputStream;
import java.io.IOException;
import java.net.URISyntaxException; import org.apache.commons.io.IOUtils;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.LocatedFileStatus;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.fs.RemoteIterator; public class HdfsTest { //public FileSystem fs = null;
/*
@Before
public void init() throws IOException, InterruptedException, URISyntaxException{
//读配置文件
Configuration conf = new Configuration();
//这里直接拷贝配置或者直接设置值
conf.set("fs.defaultFS", "hdfs://master:9000/"); //获取配置文件里面的内容
fs = FileSystem.get(conf);
//fs = FileSystem.get(new URI("hdfs://master:9000"), conf, "root");
}
*/ /**
* 上传文件
* @throws IOException
*/
public static void upload() throws IOException{
//读配置文件
//读取classpath下的core-site.xml配置文件,并且解析其的内容,封装到conf的对象中;
Configuration conf = new Configuration();
//这里直接拷贝配置或者直接设置值
//也可以在代码中对conf的配置信息进行手动设置,会覆盖配置文件中的配置信息
conf.set("fs.defaultFS", "hdfs://master:9000"); //获取配置文件里面的内容
//根据配置信息,去获取一个具体文件系统的客户端操作实例对象
FileSystem fs = FileSystem.get(conf);
//本地文件是输入流,hdfs是输出流 //先搞出路径
Path src = new Path("hdfs://master:9000/aa/test.txt");
//搞出输出流,即向hdfs上面写内容
FSDataOutputStream create = fs.create(src); //输入流就是读,本地文件,输入流
FileInputStream fileInputStream = new FileInputStream("d:/test.txt"); //将文件fileInputStream到create即完成上传到hdfs
IOUtils.copy(fileInputStream, create);
} //最快的上传文件的方法
public void upload02() throws IllegalArgumentException, IOException, InterruptedException, URISyntaxException{
//读配置文件
Configuration conf = new Configuration();
//这里直接拷贝配置或者直接设置值
conf.set("fs.defaultFS", "hdfs://master:9000"); //获取配置文件里面的内容
FileSystem fs = FileSystem.get(conf);
//FileSystem fs = FileSystem.get(new URI("hdfs://master:9000"), conf, "root");
fs.copyFromLocalFile(new Path("d:/test.txt"), new Path("hdfs://master:9000/aa/test.txt"));
} /**
* 下载文件
* @throws IOException
* @throws IllegalArgumentException
*/
public void download02() throws IllegalArgumentException, IOException{
//去配置文件
Configuration conf = new Configuration();
conf.set("fs.defaultFS", "hdfs://master:9000"); //获取配置文件里面的内容
FileSystem fs = FileSystem.get(conf);
fs.copyToLocalFile(new Path("hdfs://master:9000/aa/test.txt"), new Path("d:/test2.txt")); } /***
* 创建文件夹的方法
* @throws IOException
*/
public void mkdir02() throws IOException{
//主配置文件
Configuration conf = new Configuration();
//设置配置文件的值
conf.set("fs.defaultFS", "hdfs://master:9000");
//获取配置文件里面的内容
FileSystem fs = FileSystem.get(conf); //文件夹的创建
fs.mkdirs(new Path("hdfs://master:9000/aaa/bbb/ccc"));
} /**
* 删除文件
* @throws IOException
*/
public void remove02() throws IOException{
//主配置文件
Configuration conf = new Configuration();
//设置值
conf.set("fs.defaultFS", "hdfs://master:9000");
//获取配置文件里面的内容
FileSystem fs = FileSystem.get(conf); //执行删除操作
fs.delete(new Path("hdfs://master:9000/aaa/bbb/ccc"), true);
} /**
* 文件的移动
* @throws IOException
*/
public void move() throws IOException{
//主配置文件
Configuration conf = new Configuration();
//设置值
conf.set("fs.defaultFS", "hdfs://master:9000");
//获取配置文件里面的内容
FileSystem fs = FileSystem.get(conf); //移动操作
fs.rename(new Path("hdfs://master:9000/aa/test.txt"), new Path("hdfs://master:9000/aaa/bbb"));
} /***
* 查看文件的信息
* @throws IOException
*/
public void listFiles() throws IOException{
//主配置文件
Configuration conf = new Configuration();
//设置值
conf.set("fs.defaultFS", "hdfs://master:9000");
//获取配置文件里面的内容
FileSystem fs = FileSystem.get(conf); //查看的是文件,不是文件夹
//listFiles列出的是文件信息,而且提供递归遍历
RemoteIterator<LocatedFileStatus> listFiles = fs.listFiles(new Path("hdfs://master:9000/"), true);
//迭代输出信息
while(listFiles.hasNext()){
LocatedFileStatus file = listFiles.next();
//文件路径
Path path = file.getPath();
System.out.println(path.getName());
} System.out.println("=============================================");
//listStatus列出文件和文件夹的信息,但是不提供自带的递归遍历
FileStatus[] listStatus = fs.listStatus(new Path("hdfs://master:9000/"));
/*for(int i = 0 ; i<listStatus.length; i++){
System.out.println(listStatus[i]);
}*/
for(FileStatus fileStatus : listStatus){
//根据获取的路径获取文件夹的名称
Path path = fileStatus.getPath();
System.out.println(path.getName());
} } public static void main(String[] args) {
HdfsTest hdfsTest = new HdfsTest();
try {
//上传文件的调用
//hdfsTest.upload02(); //下载文件的调用
//hdfsTest.download02(); //文件夹的创建
//hdfsTest.mkdir02(); //删除操作
//hdfsTest.remove02(); //移动文件的操作
//hdfsTest.move(); //查看文件信息
hdfsTest.listFiles();
} catch (Exception e) {
e.printStackTrace();
}
} }

3:NameNode的职责

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

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

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

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

  1. 【Hadoop】HDFS的java客户端编写

    项目使用了Maven  Project 快速进行HDFS 客户端程序测试 客户端操作系统:win10 64位 JDK: 1.7.0_79 开发工具 :Eclipse Luna pom.xml < ...

  2. 2 weekend110的HDFS的JAVA客户端编写 + filesystem设计思想总结

    HDFS的JAVA客户端编写  现在,我们来玩玩,在linux系统里,玩eclipse 或者, 即,更改图标,成功 这个,别慌.重新换个版本就好,有错误出错是好事. http://www.eclips ...

  3. HDFS的Java客户端编写

    总结: 之前在教材上看hdfs的Java客户端编写,只有关键代码,呵呵…….闲话不说,上正文. 1. Hadoop 的Java客户端编写建议在linux系统上开发 2. 可以使用eclipse,ide ...

  4. 一次失败的尝试hdfs的java客户端编写(在linux下使用eclipse)

    一次失败的尝试hdfs的java客户端编写(在linux下使用eclipse) 给centOS安装图形界面 GNOME桌面环境 https://blog.csdn.net/wh211212/artic ...

  5. 一脸懵逼学习Hadoop中的序列化机制——流量求和统计MapReduce的程序开发案例——流量求和统计排序

    一:序列化概念 序列化(Serialization)是指把结构化对象转化为字节流.反序列化(Deserialization)是序列化的逆过程.即把字节流转回结构化对象.Java序列化(java.io. ...

  6. 一脸懵逼学习Hadoop分布式集群HA模式部署(七台机器跑集群)

    1)集群规划:主机名        IP      安装的软件                     运行的进程master    192.168.199.130   jdk.hadoop      ...

  7. 一脸懵逼学习HBase---基于HDFS实现的。(Hadoop的数据库,分布式的,大数据量的,随机的,实时的,非关系型数据库)

    1:HBase官网网址:http://hbase.apache.org/ 2:HBase表结构:建表时,不需要指定表中的字段,只需要指定若干个列族,插入数据时,列族中可以存储任意多个列(即KEY-VA ...

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

    1:首先搞好实体类对象: write 是把每个对象序列化到输出流,readFields是把输入流字节反序列化,实现WritableComparable,Java值对象的比较:一般需要重写toStrin ...

  9. day03-hdfs的客户端操作\hdfs的java客户端编程

    5.hdfs的客户端操作 客户端的理解 hdfs的客户端有多种形式: 1.网页形式 2.命令行形式 3.客户端在哪里运行,没有约束,只要运行客户端的机器能够跟hdfs集群联网 文件的切块大小和存储的副 ...

随机推荐

  1. Houdini OpenCL

    SOP: simple moveKernel #include "interpolate.h" float lerpConstant( constant float * in, i ...

  2. python3+selenium入门09-键盘事件

    Keys类提供了键盘上几乎所有按键的方法.通过send_keys()方法不仅可以用来模拟键盘输入,还可以用它来模拟键盘上的按键.包括组合键,比如Ctrl+a等 需要导入Keys类 from selen ...

  3. codis3.2安装报错dashboard.go:369: [PANIC] call rpc create-proxy to dashboard 127.0.0.1:18080 failed的处理

    codis3.2安装报错dashboard.go:369: [PANIC] call rpc create-proxy to dashboard 127.0.0.1:18080 failed的处理 执 ...

  4. ASP.NET MVC5高级编程 之 Ajax

    jQuery不仅支持所有现代浏览器,包括IE.Firefox.Safari.Opera和Chrome等,还可以在编写代码和浏览器API冲突时隐藏不一致性(和错误). 1. jQuery jQuery擅 ...

  5. python2x 和 python 3x的区别

    1,大环境: python2x: 大神贡献源码,这些源码有自己语言的特色,源码不规范,源码重复代码太多. python崇尚的是优美清晰简单. python3x: 龟叔重新整理,将源码规范化,简单化,统 ...

  6. ajax请求封装的公共方法

    /** * post 方法 */ function ajaxPost(url, params, callBack) { ajax(url,params,"post",callBac ...

  7. vue项目中实现复制内容到剪贴板

    项目中要实现分享功能,现在各种接口都关闭了,而且不同的浏览器要使用不同的代码,最后决定直接复制url,然后手动分享 Vue中使用了vue-clipboard2 github地址:https://git ...

  8. Confluence 6 配置数字格式

    在 Confluence 中使用了 2 种数字格式: 整形数字格式.例如: ############### 小数数字格式.例如:###############.########## Confluenc ...

  9. Confluence 6 数据中心的 SAML 单点登录最佳实践和故障排除

    最佳实践 SAML 授权仅仅在有限的时间进行校验.你需要确定运行你的应用的计算机时间与 IdP 的时间是同步的. 如果你应用中的用户和用户组是通过用户目录进行配置的,你通常希望用户来源目录和你的 Id ...

  10. pytorch:修改预训练模型

    torchvision中提供了很多训练好的模型,这些模型是在1000类,224*224的imagenet中训练得到的,很多时候不适合我们自己的数据,可以根据需要进行修改. 1.类别不同 # codin ...