一、创建Java并使用maven在依赖hdfs所需要的jar文件
创建过程:略
pom.xml如下:
<dependencies>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>2.6.0</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-hdfs</artifactId>
<version>2.6.0</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
</dependency>
</dependencies>
二、JAVA代码
对hdfs的操作都依附于FileSystem类hdfs客户端
1)初始化FileSystem fs
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.junit.Before;
import org.junit.Test;
import java.io.IOException;
import java.net.URI;
//定义连接HDFS的客户端
public FileSystem fs = null;
//初始化fs避免每次测试时重复代码
@Before
public void init() throws Exception {
//创建配置类
//方法一:引入配置文件
//方法二:使用set方法设置
Configuration conf = new Configuration();
//此处设置即为搭建环境时候hdfs-core.xml文件中的配置信息
conf.set("fs.defaultFS", "hdfs://192.168.6.117:9000/");
//使用静态方法创建客户端
/**
* 方法一:直接FileSystem.get(conf) 这种方法需要配置JVM参数-DHADOOP_USER_NAME=hadoop
* "hadoop"为安装HDFS的Linux用户名
*/
fs = FileSystem.get(new URI("hdfs://192.168.6.117:9000"),conf,"hadoop");
}
2)文件上传
代码:
/**
* 文件上传
*/
@Test
public void upload() throws IOException {
//本地文件
Path localFile = new Path("d:/hdfstest.txt");
//hdfs存放位置
Path remoteFile = new Path("/hdfsTest.txt");
fs.copyFromLocalFile(localFile, remoteFile);
}
验证:
3)文件下载
代码:
/**
* 文件下载
*/
@Test
public void download() throws IOException{
Path remoteFile = new Path("/hdfsTest.txt");
Path localFile = new Path("d:/hdfstest1.txt");
//这里面的false和true很重要
//不用这俩参数很容易出现空指针异常
fs.copyToLocalFile(false,remoteFile, localFile, true);
}
验证:
4)创建文件夹
代码:
/**
* 创建文件夹
*/
@Test
public void mkdir() throws IllegalArgumentException, Exception {
fs.mkdirs(new Path("/aaa/bbb/ccc"));
}
验证:
5)删除文件
代码:
/**
* 删除文件或者文件夹
*/
@Test
public void rm() throws IllegalArgumentException, IOException {
//true代表递归删除相当于 rm -r命令
fs.delete(new Path("/aaa"), true);
}
6)查看文件信息
准备基础数据:
文件、空文件夹、有文件的文件夹、多层文件夹
a-b-c-file.txt为多层文件夹下的文件
nullDir为空文件夹
aaa-file.txt为在aaa文件夹下的文件
代码:
/**
* 查看文件信息
*/
@Test
public void getFileInfo() throws Exception{
//查看文件如果是文件夹则递归打开
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);
}
//只查看指定目录下的文件或者文件夹信息
System.out.println("---------------------------------");
FileStatus[] listStatus = fs.listStatus(new Path("/"));
for(FileStatus status: listStatus){
String name = status.getPath().getName();
System.out.println(name + (status.isDirectory()?" is dir":" is file"));
}
}
结果:
本人QQ/Wechat : 806751350
该代码已经上传至gitbub上
地址为:https://github.com/linminlm/hadoop.git
有兴趣的人可以下载看看。其中包括了我之前的springboot以及springCloud的代码