1.在本机中配置HADOOP_HOME的环境变量

2.配置PATH路径

3.创建Maven工程

4.在pom.xml文件中导入依赖(这边不做过多解释,导入时看清楚自己的hadoop版本)

5.API操作

package com.root.hdfs;

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.fs.*;

import org.junit.After;

import org.junit.Before;

import org.junit.Test;

import java.io.IOException;

import java.io.InputStream;

import java.net.URI;

import java.net.URISyntaxException;

import java.util.Arrays;

/**

* 客户端代码常用操作

* 1.获取一个客户端对象

* 2.执行相关的命令操作

* 3.关闭资源

*/

public class HDFSClient {

private FileSystem fs;//ctrl+alt+f 把 fs 升级为全局变量

@Before //若不加 Before 和下面的 After 会报空指针异常

//执行顺序:Before->Test->After

public void init() throws URISyntaxException, IOException {

//连接集群的nn地址

URI uri = new URI("hdfs://hadoop102:8020");

//创建一个配置文件

Configuration configuration = new Configuration();

//获取到客户端对象

//ctrl+p:提示参数

fs = FileSystem.get(uri, configuration);

}

@After

public void close() throws IOException {

//关闭资源

fs.close();

}

//创建文件夹

@Test

public void testmkdir() throws URISyntaxException, IOException {

fs.mkdirs(new Path("/homework/demo01"));

}

//创建文件

@Test

public void mkfile() throws IOException {

FSDataOutputStream outputStream = fs.create(new Path("/xiaoxiao.txt"));

outputStream.writeUTF("Hello! Be my lover!");

outputStream.flush();

}

//上传文件

@Test

public void testPut() throws IOException {

//参数一:删除原数据;参数二:是否允许覆盖;参数三:原数据路径;参数四:目的地路径

fs.copyFromLocalFile(false, true, new Path("D:\\SoRa.txt"), new Path("/homework/demo01"));

}

//文件下载

@Test

public void testGet() throws IOException {

//参数解读:参数一:源文件是否删除;参数二:源文件路径HDFS;参数三:目标地址路径windows;参数四:crc是否开启校验

fs.copyToLocalFile(false, new Path("hdfs://hadoop102/homework/demo01/SoRa.txt"), new Path("D:\\HDFSClient01\\source"), false);

}

//删除目录

@Test

public void testRm() throws IOException {

//参数解读:参数一:要删除的目录;参数二:是否递归删除

//删除空目录

fs.delete(new Path("/homework/demo02"), false);

//删除非空目录

fs.delete(new Path("/homework/demo01"), true);//递归删除true

}

//删除文件

@Test

public void testFileDelete() throws IOException {

fs.delete(new Path("/homework/demo01/SoRa.txt"), true);

}

//文件更名和移动

@Test

public void testmv() throws IOException {

//参数一:源文件路径;参数二:目标文件路径

//文件名称的修改

fs.rename(new Path("/homework/demo01/SoRa.txt"), new Path("/homework/demo01/SORA.txt"));

//文件的移动和更名

fs.rename(new Path("/homework/demo01/SORA.txt"), new Path("/SORA.txt"));

}

//获取文件详细信息

@Test

public void fileDetail() throws IOException {

//获取所有文件信息 下面代码.var返回一个迭代器Iterator

RemoteIterator listFiles = fs.listFiles(new Path("/SORA.txt"), true);

//遍历文件(迭代器)

while (listFiles.hasNext()) {

LocatedFileStatus fileStatus = listFiles.next();

System.out.println("----------" + fileStatus.getPath() + "----------");

System.out.println(fileStatus.getPermission());//获取权限

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

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

System.out.println(fileStatus.getLen());//获取文件大小

System.out.println(fileStatus.getModificationTime());//上次修改的时间

System.out.println(fileStatus.getReplication());//获取副本数量

System.out.println(fileStatus.getBlockSize());//获取块大小

System.out.println(fileStatus.getPath().getName());//文件名称

//获取块信息

BlockLocation[] blockLocations = fileStatus.getBlockLocations();

System.out.println(Arrays.toString(blockLocations));

}

}

//判断是文件夹还是文件

@Test

public void testFile() throws IOException {

FileStatus[] listStatus = fs.listStatus(new Path("/"));

for (FileStatus status : listStatus) {

if (status.isFile()) {

System.out.println("文件:" + status.getPath().getName());

} else {

System.out.println("目录:" + status.getPath().getName());

}

}

}

}

文章链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: