【Hadoop】HDFS的java客户端编写
项目使用了Maven Project 快速进行HDFS 客户端程序测试
客户端操作系统:win10 64位
JDK: 1.7.0_79
开发工具 :Eclipse Luna
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.alixx</groupId>
<artifactId>hdfsz</artifactId>
<version>0.0.1</version>
<packaging>jar</packaging>
<name>hdfsz</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.4</version>
<scope>test</scope>
</dependency>
<!-- hadoop 分布式文件系统类库 -->
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-hdfs</artifactId>
<version>2.7.3</version>
</dependency>
<!-- hadoop 公共类库 -->
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>2.7.3</version>
</dependency>
</dependencies>
</project>
测试类HDFSUtil
package com.bonc.hdfsz;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import org.apache.commons.compress.utils.IOUtils;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
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;
import org.junit.Before;
import org.junit.Test;
public class HdfsUtil {
/*
FileSystem是文件系统的抽象,HDFS是分布式文件系统对FileSystem的实现,如此即可解耦合。
不论底层文件系统的具体实现是什么样的,文件系统FileSystem统一提供了访问接口。
*/
FileSystem fs = null;
@Before
public void init() throws IOException, InterruptedException, URISyntaxException{
//访问HDFS文件系统两种方式
Configuration conf = new Configuration();
/*
方式1:设置默认文件系统、设置run Configuration的参数 -DHADOOP_USER_NAME=dream361
默认读取classpath下的xxx.site.xml配置文件,并解析其内容,封装到conf对象中。
conf.set("fs.defaultFS", "hdfs://master:9000/");
*/
fs = FileSystem.get(conf);
/*
方式2:在此方法的参数中设置默认文件系统、用户名
根据配置信息,去获取一个具体文件系统的客户端操作实例对象
*/
fs = FileSystem.get(new URI("hdfs://master:9000/"), conf, "dream361");
}
// 上传方式1:更底层的
@Test
public void upload1() throws IOException{
Path dst = new Path("hdfs://master:9000/c.txt");
FSDataOutputStream os = fs.create(dst);
FileInputStream in = new FileInputStream("D:/c.txt");
IOUtils.copy(in, os);
}
// 上传方式2: 封装好的
@Test
public void upload2() throws IllegalArgumentException, IOException{
fs.copyFromLocalFile(new Path("D:/c2.txt"), new Path("hdfs://master:9000/c3.txt"));
}
// 下载文件
@Test
public void download() throws Exception, IOException{
fs.copyToLocalFile(new Path(""), new Path(""));
}
//迭代列出文件
@Test
public void listFiles1() throws FileNotFoundException, IllegalArgumentException, IOException{
//listFiles列出的是文件信息,而且提供递归遍历 ,第二个参数为false则不提供递归
RemoteIterator<LocatedFileStatus> files = fs.listFiles(new Path("/"), true);
while(files.hasNext()){
LocatedFileStatus file = files.next();
Path filePath = file.getPath();
String fileName = filePath.getName();
System.out.println(fileName);
}
}
//迭代列出目录及文件
@Test
public void listFiles2() throws FileNotFoundException, IllegalArgumentException, IOException{
//listStatus可以列出文件和目录信息,但是不提供自带的递归遍历
FileStatus[] listStatus = fs.listStatus(new Path("/"));
for(FileStatus status:listStatus){
String name = status.getPath().getName();
//判断是目录还是文件,然后打印name+和判断结果
System.out.println(name+(status.isDirectory()?" is dir":" is file"));
}
}
//创建目录
@Test
public void mkdir() throws IllegalArgumentException, IOException{
fs.mkdirs(new Path("/aa/bb/cc"));
}
//删除文件或目录
@Test
public void rmFile() throws IllegalArgumentException, IOException{
fs.delete(new Path("/aa"),true);
}
//移动文件
@Test
public void mvFile() throws IllegalArgumentException, IOException{
fs.rename(new Path("/aa/a.txt"), new Path("/bb/b.txt"));
}
//在程序入口测试
public static void main(String[] args) throws IOException {
//配置文件信息
Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(conf);
Path src = new Path("hdfs://master:9000/jdk.tar.gz");
FSDataInputStream in = fs.open(src);
FileOutputStream os = new FileOutputStream("D:/jdk.tar.gz");
IOUtils.copy(in, os);
}
}
【Hadoop】HDFS的java客户端编写的更多相关文章
- 2 weekend110的HDFS的JAVA客户端编写 + filesystem设计思想总结
HDFS的JAVA客户端编写 现在,我们来玩玩,在linux系统里,玩eclipse 或者, 即,更改图标,成功 这个,别慌.重新换个版本就好,有错误出错是好事. http://www.eclips ...
- HDFS的Java客户端编写
总结: 之前在教材上看hdfs的Java客户端编写,只有关键代码,呵呵…….闲话不说,上正文. 1. Hadoop 的Java客户端编写建议在linux系统上开发 2. 可以使用eclipse,ide ...
- 一次失败的尝试hdfs的java客户端编写(在linux下使用eclipse)
一次失败的尝试hdfs的java客户端编写(在linux下使用eclipse) 给centOS安装图形界面 GNOME桌面环境 https://blog.csdn.net/wh211212/artic ...
- 一脸懵逼学习hadoop之HDFS的java客户端编写
1:eclipse创建一个项目,然后导入对应的jar包: 鼠标右击项目,点击properties或者alt+enter快捷键--->java build path--->libraries ...
- day03-hdfs的客户端操作\hdfs的java客户端编程
5.hdfs的客户端操作 客户端的理解 hdfs的客户端有多种形式: 1.网页形式 2.命令行形式 3.客户端在哪里运行,没有约束,只要运行客户端的机器能够跟hdfs集群联网 文件的切块大小和存储的副 ...
- hdfs shell命令及java客户端编写
一. hdfs shell命令 可以通过hadoop fs 查看所有的shell命令及其用法. 传文件到hdfs: hadoop fs -put /home/koushengrui/Downloads ...
- Hadoop学习(2)-java客户端操作hdfs及secondarynode作用
首先要在windows下解压一个windows版本的hadoop 然后在配置他的环境变量,同时要把hadoop的share目录下的hadoop下的相关jar包拷贝到esclipe 然后Build Pa ...
- HDFS的Java客户端操作代码(HDFS的查看、创建)
1.HDFS的put上传文件操作的java代码: package Hdfs; import java.io.FileInputStream; import java.io.FileNotFoundEx ...
- HDFS的java客户端操作代码(Windows上面打jar包,提交至linux运行)
1.通过java.net.URL实现屏幕显示demo1文件的内容 package Hdfs; import java.io.InputStream; import java.net.URL; impo ...
随机推荐
- Linux查看内存占用情况
输入:top PID 进程的ID USER 进程所有者 PR 进程的优先级别,越小越优先被执行 Ninice 值 VIRT 进程占用的虚拟内存 RES 进程占用的物理内存 SHR 进程使用的共享内存 ...
- iOS 图文并茂的带你了解深拷贝与浅拷贝
一.概念与总结 1.浅拷贝 浅拷贝就是对内存地址的复制,让目标对象指针和源对象指向同一片内存空间,当内存销毁的时候,指向这片内存的几个指针需要重新定义才可以使用,要不然会成为野指针. 浅拷贝就是拷贝指 ...
- Python中的元类(metaclass)
推荐+收藏:深刻理解Python中的元类(metaclass) 做一些笔记学习学习: 在大多数编程语言中,类就是用来描述如何生成一个对象的代码段,在Python中类也是一个对象,这个(类)对象自身拥有 ...
- 20170709_python_学习记录
a='ABC';变量赋值时发生了什么 1.在内存中创建一个字符串'ABC' 2.在内存中创建一个变量a指向字符串'ABC' list [] 相当于数组 指向可以变动 str[1,2,3,4] str. ...
- 关于MUI集成微信分享遇到的坑
今天聊一下MUI这个框架吧! 首先,用这个框架也有很长一段时间了,项目不同,涉及到的功能也有不同,之前没有涉及到微信分享相关的内容!今天,遇到了,也解决了,分享出来. 下面是手顺: 1.分享的代码是参 ...
- DNS,TCP,IP,HTTP,socket,Servlet概念整理
DNS,TCP,IP,HTTP,socket,Servlet概念整理 常见的协议虽然很容易理解,但是看了之后过一段时间不看还是容易忘,笔记如下,比较零碎,勉强供各位复习.如有错误欢迎指正. D ...
- 【css】border-image
1. border-image 一个新css3 样式 给边框增加图片,还可以拉升 或重复图片 round 为重复 sketch 为拉升 border: 15px solid transparent; ...
- CentOS 7.3.1611系统安装配置图解教程
操作系统:CentOS 7.3.1611 IP地址:192.168.21.130 网关:192.168.21.2 DNS:8.8.8.8 8.8.4.4 备注: CentOS 7.x系列只有64位系统 ...
- java中方法的参数传递机制
问:当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递? 答:是值传递.Java 编程语言只有值传递参数.当一个对象实例作为一个 ...
- 简单聊聊不可或缺的Nginx反向代理服务器--实现负载均衡【上篇】
今天又是新的一周,我养足了精神去对待新一周的工作,但是今天到公司发现还是有一点空闲时间的,所以就想与之前接触过的Nginx再交往得更深一点儿. 什么是Nginx: Nginx是一款高性能的http服务 ...