1.1 搭建开发环境
1.2 创建maven项目
1.3 加入依赖
Maven仓库网址 https://mvnrepository.com/
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>3.3.2</version>
</dependency>
1.4 获取api中的客户端对象
在java中操作HDFS,首先要获得一个客户端实例
Configuration conf = new Configuration()
FileSystem fs = FileSystem.get(conf)
我们的操作目标是HDFS,所以获取到的fs对象应该是DistributedFileSystem的实例;
get方法是从何处判断具体实例化那种客户端类呢? ——从conf中的一个参数 fs.defaultFS的配置值判断;
如果我们的代码中没有指定fs.defaultFS,并且工程classpath下也没有给定相应的配置,conf中的默认值就来自于hadoop的jar包中的core-default.xml,默认值为: file:///,则获取的将不是一个DistributedFileSystem的实例,而是一个本地文件系统的客户端对象
1.5 HDFS客户端操作数据代码示例
文件的增删改查
package Bigdata.Hdfs;
import org.apache.hadoop.conf.Configuration;
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;
import java.io.IOException;
import java.net.URI;
public class HdfsCommand {
FileSystem fs;
/*
初始化FileSystem文件操作系统类
*/
//try catch语句捕捉异常语句并处理
//连接hadoop配置,
//Before是每执行一次下面操作先执行这个
@Before
public void init() {
Configuration conf = new Configuration();
try {
URI uri = new URI("hdfs://master:9000");
String user = "hd";
fs = FileSystem.get(uri, conf, user);
} catch (Exception e) {
e.printStackTrace();
}
}
//新建一个目录,目录名为out
//hdfs dfs -mkdir /out
@Test
public void mkdir() {
Path path = new Path("/out");
try {
fs.mkdirs(path);
System.out.println("创建完成...");
fs.close();
} catch (Exception e) {
e.printStackTrace();
}
}
//从hadoop下载一个文件,保存当前目录
//hdfs dfs -get /hello.txt .
@Test
public void get() {
Path src = new Path("/hello.txt");
//下载到当前目录
Path dst = new Path(".");
try {
fs.copyToLocalFile(src, dst);
System.out.println("下载完成...");
fs.close();
} catch (Exception e) {
e.printStackTrace();
}
}
//上传hello.txt文件到 hadoop的out目录中
//hdfs dfs -put hello.txt /out
@Test
public void put() {
Path src = new Path("hello.txt");
Path dst = new Path("/out");
try {
fs.copyFromLocalFile(src, dst);
System.out.println("上传完成...");
fs.close();
} catch (Exception e) {
e.printStackTrace();
}
}
//在Hadoop上删除一个out目录下的hello.txt的文件
//hdfs dfs -rm /out/hello.txt
@Test
public void delete() {
Path src = new Path("/out/hello.txt");
try {
fs.delete(src, true);
System.out.println("删除完成...");
fs.close();
} catch (Exception e) {
e.printStackTrace();
}
}
//例举hadoop中的所有目录文件,这个是没有进行遍历的
//hdfs dfs -ls /
@Test
public void list() throws IOException {
Path path = new Path("/");
RemoteIterator<LocatedFileStatus> it = fs.listLocatedStatus(path);
while (it.hasNext()) {
LocatedFileStatus status = it.next();
System.out.println("------> " + status.getPath());
}
fs.close();
}
}