一、实验目标
通过java api来操作hdfs文件系统hdfs,相关的操作有:文件上传、文件下载、新建文件夹、查看文件、删除文件。
二、条件准备
1.linux下安装好hadoop,这里使用hadoop2.7.3
2.window解压hadoop2.7.3的包
2.windows下安装好jdk1.8
3.windows下安装好idea,这里使用idea2022
4.windows下安装好maven,这里使用maven3.6.3
5.在win系统下不配置hadoop环境,直接运行代码会报错,显示缺少winutils.exe 和 hadoop.dll 两个文件. (文件位于个人主页&(13条消息) hadoop系统应用之java-api对hdfs的操作实验缺少的两个文件-桌面系统文档类资源-csdn文库)
6.将hadoop-2.7.3文件夹拷贝到一个没有中文的路径中;
7.把winutils.exe 和 hadoop.dll 两个文件放到hadoop-2.7.3文件夹中bin目录下
8.在windows系统,配置hadoop的环境变量: hadoop_home,并将%hadoop_home%\bin添加到path中.
9.把hadoop-2.7.3文件夹中bin目录下的hadoop.dll 放到系统盘: c:windows \system32目录下
三、用idea创建对应的java项目
1.新建一个maven工程
2.在pom.xml添加相关依赖(ctr+s保存后,会下载对应的依赖)
代码如下
<dependencies>
<!-- hadoop所需依赖包 -->
<dependency>
<groupid>org.apache.hadoop</groupid>
<artifactid>hadoop-common</artifactid>
<version>2.7.3</version>
</dependency>
<dependency>
<groupid>org.apache.hadoop</groupid>
<artifactid>hadoop-hdfs</artifactid>
<version>2.7.3</version>
</dependency>
<dependency>
<groupid>org.apache.hadoop</groupid>
<artifactid>hadoop-client</artifactid>
<version>2.7.3</version>
</dependency>
<!-- junit测试依赖 -->
<dependency>
<groupid>junit</groupid>
<artifactid>junit</artifactid>
<version>release</version>
</dependency>
</dependencies>
</project>
3.右下角下载依赖
4.查看依赖和外部库
四、初始化
1.创建一个java类,添加对应代码
public class javaapi {
filesystem hdfs = null;
public javaapi() {
}
@before
public void init() throws ioexception {
configuration conf = new configuration();
conf.set("fs.defaultfs", "hdfs://yangjian00:9000");
system.setproperty("hadoop_user_name", "root");
this.hdfs = filesystem.get(conf);
}
@after
public void close() throws ioexception {
this.hdfs.close();
}
}
ps:上面代码中的参数"hdfs://yangjian00:9000"是hadoop配置文件中core-site.xml的配置信息,
五、hdfs代码操作
1.上传文件到hdfs文件系统
(1)我在d盘的hdfs文件夹下面创建了个test.txt文本
(2)写入代码
/*
上传测试
*/
@test
public void testuploadfiletohdfs() throws ioexception {
// 待上传的文件路径(windows)
path src = new path("d:\\hadoop\\hdfs");
// 上传之后存放的路径(hdfs)
path dst = new path("/text");
// 上传
hdfs.copyfromlocalfile(src,dst);
system.out.println("上传成功");
}
(3)在centos的hadoop中查看test.txt文件(上传成功)
2.从hdfs下载文件到本地
(1)写入下载代码
/*
下载测试
*/
@test
public void testdownfiletolocal() throws ioexception {
// 待下载的路径(hdfs)
path src = new path("/text.txt");
// 下载成功之后存放的路径(windows)
path dst = new path("d:\\hadoop\\hdfs\\text1");
// 下载
hdfs.copytolocalfile(false,src,dst,true);
system.out.println("下载成功");
(2)从浏览器中下载查看
3.在hdfs中创建目录
(1)写入代码
/*
创建目录测试
*/
@test
public void testmkdirfile() throws ioexception {
// 待创建目录路径
path src = new path("/yyds");
// 创建目录
hdfs.mkdirs(src);
system.out.println("创建成功");
}
(2)从浏览器中下载查看
4.从新命名测试
(1)写入代码
/*
重命名测试
*/
@test
public void testrenamefile() throws ioexception {
// 重命名之前的名字
path src = new path("/yyds");
// 重命名之后的名字
path dst = new path("/hdfs2");
// 重命名
hdfs.rename(src,dst);
system.out.println("重命名成功");
}
(2)从浏览器中下载查看
5.删除测试
/*
删除测试
*/
@test
public void testrm() throws ioexception {
hdfs.delete(new path("/hdfs"),true);
hdfs.delete(new path("/hdfs1"), true);
hdfs.delete(new path("/tmp"), true);
}
发表评论