博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JAVA怎么连接华为的HDFS系统_JAVA-API操作HDFS文件系统(HDFS核心类FileSystem的使用)...
阅读量:6409 次
发布时间:2019-06-23

本文共 4240 字,大约阅读时间需要 14 分钟。

HDFS核心类FileSystem的使用

一、引入jar包

Hadoop的JAVAjar包在Hadoop2.7.7/share/hadoop里有如下几个文件夹。

fbb97687c5800636a312f14e0888dc4f.png

common是Hadoop的核心类,它是下面其他核心类的依赖,使用其他类必须引入common包里的jar包。

所以使用HDFS的FileSystem包必须引入Common和hdfs两个文件夹里面所有jar包。

5eef28cad5976e51fdbc97b02b9eb10e.png

红色jar包为hadoop作者所写jar包,依赖在lib里面。都必须引入。hdfs同理。

二、JAVA-API连接HDFS

(所有jar包都是org.apache.hadoop.*;里的jar包)

@Testpublic voidconnectHDFS() {

Configuration conf= newConfiguration();

conf.set("fs.defaultFS","hdfs://192.168.100.2:9000");//指定hadoop使用的文件系统和文件系统所在主机和端口

try{

FileSystem fileSystem= FileSystem.get(conf); //FileSystem 连接

FileStatus fileStatus = fileSystem.getFileLinkStatus(new Path("/user"));

System.out.println(fileStatus.isDirectory());

}catch(IOException e) {//TODO 自动生成的 catch 块

e.printStackTrace();

}

}

三、文件上传

1.方法1:使用API直接上传

@Testpublic voidupload1() {

Configuration conf= newConfiguration();

conf.set("fs.defaultFS","hdfs://192.168.100.2:9000");//连接hdfs

try{

FileSystem fileSystem=FileSystem.get(conf);

fileSystem.copyFromLocalFile(new Path("d:\\jdk-8u221-linux-x64.tar.gz"), new Path("/jdk-8u221-linux-x64.tar.gz"));//前一个path为本地路径 后一个path为hdfs保存路径

} catch(IOException e) {//TODO 自动生成的 catch 块

e.printStackTrace();

2.方法2:使用IO流上传

@Testpublic voidupload2() {

Configuration conf= newConfiguration();

conf.set("fs.defaultFS","hdfs://192.168.100.2:9000");try{

FileSystem fileSystem=FileSystem.get(conf);

FSDataOutputStream create= fileSystem.create(new Path("/stud")); //hdfs输出流

FileInputStream f = new FileInputStream(new File("d:\\stud")); //文件输入流

int len = 0;byte[] b = new byte[1024];while((len = f.read(b))!=-1) {

create.write(b,0, len);

}

f.close();

create.close();

}catch(IOException e) {//TODO 自动生成的 catch 块

e.printStackTrace();

}

}

四、文件下载

1.使用API直接下载

@Testpublic voiddownload1() {

Configuration conf= newConfiguration();

conf.set("fs.defaultFS","hdfs://192.168.100.2:9000");try{

FileSystem fileSystem=FileSystem.get(conf);

fileSystem.copyToLocalFile(new Path("/stud"), new Path("E:\\stud")); //前者为hdfs路径 后者为本地保存路径

} catch(IOException e) {//TODO 自动生成的 catch 块

e.printStackTrace();

}

}

2.使用IO流下载

@Testpublic voiddownload2() {

Configuration conf= newConfiguration();

conf.set("fs.defaultFS","hdfs://192.168.100.2:9000");try{

FileSystem fileSystem=FileSystem.get(conf);

FSDataInputStream open= fileSystem.open(new Path("/stud"));

FileOutputStream file= new FileOutputStream(new File("E:\\stud1"));byte [] b = new byte[1024];int len = 0;while((len = open.read(b))!=-1) {

file.write(b,0, len);

}

open.close();

file.close();

}catch(IOException e) {//TODO 自动生成的 catch 块

e.printStackTrace();

}

}

五、创建文件夹(创建多级文件夹)

@Testpublic voidmkdir() {

Configuration conf= newConfiguration();

conf.set("fs.defaultFS","hdfs://192.168.100.2:9000");try{

FileSystem fileSystem=FileSystem.get(conf);boolean mkdirs = fileSystem.mkdirs(new Path("/user/ky1")); //输入单级或多级文件夹

System.out.println(mkdirs?"创建成功":"创建失败");

}catch(IOException e) {//TODO 自动生成的 catch 块

e.printStackTrace();

}

}

六、重命名或者移动

@Testpublic voidrename() {

Configuration conf= newConfiguration();

conf.set("fs.defaultFS","hdfs://192.168.100.2:9000");try{

FileSystem fileSystem=FileSystem.get(conf);

fileSystem.rename(new Path("/hadoop01"), new Path("/hadoop02")); //前者为修改前,后者为修改后

} catch(IOException e) {//TODO 自动生成的 catch 块

e.printStackTrace();

}

}

七、递归遍历所有文件或文件夹

@Testpublic voidlsr() {

Configuration conf= newConfiguration();

conf.set("fs.defaultFS","hdfs://192.168.100.2:9000");try{

FileSystem fileSystem=FileSystem.get(conf);

FileStatus[] listStatus= fileSystem.listStatus(new Path("/"));for(FileStatus fileStatus : listStatus) {

isDir(fileStatus, fileSystem);

}

}catch(IOException e) {//TODO 自动生成的 catch 块

e.printStackTrace();

}

}public voidisDir(FileStatus fileStatus,FileSystem fileSystem) {if(fileStatus.isDirectory()) {

String dirname= fileStatus.getPath().getName();

;

System.out.println("文件夹:"+dirname);

FileStatus[] listStatus;try{

listStatus= fileSystem.listStatus(new Path("/"+dirname));for(FileStatus fileStatus2 : listStatus) {

isDir(fileStatus2,fileSystem);

}

}catch(FileNotFoundException e) {//TODO 自动生成的 catch 块

e.printStackTrace();

}catch(IllegalArgumentException e) {//TODO 自动生成的 catch 块

e.printStackTrace();

}catch(IOException e) {//TODO 自动生成的 catch 块

e.printStackTrace();

}

}else{

String dirname= fileStatus.getPath().getName();

System.out.println("文件:"+dirname);

}

}

73c860d262a014487072b017ca0b9e22.png

还有许多方法用法相似 不一一赘述。

转载地址:http://glwra.baihongyu.com/

你可能感兴趣的文章
【366天】跃迁之路——程序员高效学习方法论探索系列(实验阶段124-2018.02.06)...
查看>>
POJ3070-Fibonacci(矩阵快速幂)
查看>>
[vue插件]基于vue2.x的电商图片放大镜插件
查看>>
标准的组件结构
查看>>
vue——一个页面实现音乐播放器
查看>>
NET Core-学习笔记(二)
查看>>
职业生涯上的点点滴滴
查看>>
一起来将vscode变成私人定制笔记本
查看>>
Flutter 云音乐
查看>>
RecyclerView实现多type页面
查看>>
个人的web商城网站
查看>>
debian fcitx
查看>>
排中律与实无穷问题的性质分析
查看>>
08/23 学习总结
查看>>
物理层
查看>>
linux多网卡路由设置
查看>>
八大监听器
查看>>
self.navigationController退出到指定页面,或者一次性pop出n个页面
查看>>
iptables 端口转发以及双向通信
查看>>
备战一线互联网公司Java工程师面试题 (1)
查看>>