接上文————>
基于hadoop2.7.x centos7.x idea2020.3
目录:
一.API操作配置
项目结构:
1.给idea项目添加hadoop中的jar包
2.导入jar包
选择hadoop安装包share下的整个hadoop包里面的jar文件全部导入
将hadoop.dll文件拷贝到C:/Windows/System32目录下,最后重启电脑。(这里在安装配置Windows的hadoop的时候已经拷贝)
二.Io操作(上传/下载)
记得项目内配置Maven,这里之前已经配置
1.上传
hadoop依赖(把下列代码放入pom.xml中)
<dependencies>
<!-- 测试-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
点击刷新一下依赖:
新建java文件,写入以下代码:
第一种方式:
package com.qingtaishuju.zrt;
//依赖可手自己导入
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;
import org.junit.Test;
import java.io.File;
import java.io.FileInputStream;
import java.net.URI;
public class Io {
// 全局变量
Configuration configuration = new Configuration();
// 定义IP,指定自己的HDFS IP
private static String IP = "hdfs://hy:9000";
// TODO:2022/5/27 上传
@Test
public void upload() throws Exception {
// 1.获取文件系统
FileSystem fs = FileSystem.get(new URI(IP), configuration, "admin");
// 2.创建输入流,上传idea本地的文件到HDFS
FileInputStream inputStream = new FileInputStream(new File("D:\\IDEA\\tomcat\\HDFS1\\wenjian\\1.txt"));
// 3.创建输出流,将本地文件输出到HDFS的指定文件夹
FSDataOutputStream outputStream = fs.create(new Path("/tmp/0000000.txt"));
// 4.对拷
IOUtils.copyBytes(inputStream, outputStream, configuration);
// 5.关流
IOUtils.closeStream(inputStream);
IOUtils.closeStream(outputStream);
}
}
第二种方式:
//文件上传
@Test
public void upload() throws Exception{
//1.创建配置信息对象
configuration.set("fs.defaultFS",IP);
FileSystem fs = FileSystem.get(new URI(IP),configuration,"zrt");
//2.上传,将本地文件上传到HDFS的指定位置
fs.copyFromLocalFile(new Path("D:\\IDEA\\tomcat\\HDFS1\\wenjian\\1.txt"),new Path("/tmp/test001.txt"));
//3.关闭资源
fs.close();
}
}
查看:
运行结果:
2.下载
代码接上
第一种方式:
@Test
public void getFileToConsle()throws Exception{
//1.获取文件系统
FileSystem fs = FileSystem.get(new URI(IP),configuration,"zrt");
//2.获取输入流,hdfs里面要有这个文件
FSDataInputStream fis = fs.open(new Path("/tmp/0000000.txt"));
//3.打印到控制台
IOUtils.copyBytes(fis,System.out,configuration);
//4.关闭资源
IOUtils.closeStream(fis);
}
第二种方式:
//这个方式没运行成功
@Test
public void getFile() throws Exception{
//1.获取文件系统
FileSystem fs = FileSystem.get(new URI(IP),configuration,"zrt");
//2.下载
fs.copyToLocalFile(false,new Path("/tmp/test001.txt"),
new Path("D:\\IDEA\\tomcat\\HDFS1\\wenjian\\test001.txt"));
//3.关闭资源
fs.close();
}
运行结果:
三.其他操作
1.获取文件系统
创建新java文件,填入如下代码:
package com.qingtaishuju.zrt;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.junit.Test;
import java.net.URI;
public class Connection {
//全局变量
Configuration configuration = new Configuration();
//定义IP,自己的hadoop IP
private static String IP = "hdfs://hy:9000";
//获取文件系统
@Test
public void init()throws Exception{
//1.创建配置信息对象
configuration.set("fs.defaultFS",IP);
//2.获取文件系统
FileSystem fs = FileSystem.get(new URI(IP),configuration,"zrt");
//3.打印文件系统
System.out.println(fs.toString());
}
}
运行结果:
2.创建目录
代码接上,共用引入的类就行,省的新建java文件,方便。
@Test
public void mkdir() throws Exception{
//1.获取文件系统
FileSystem fs = FileSystem.get(new URI(IP),configuration,"zrt");
//2.创建目录(这里在tmp目录下创建zrt666目录)
fs.mkdirs(new Path("/tmp/zrt666"));
//3.关闭资源
fs.close();
}
运行结果:
3.删除目录
代码接上,共用引入的类就行,省的新建java文件,方便。
@Test
public void delete() throws Exception{
//1.获取文件系统
FileSystem fs = FileSystem.get(new URI(IP),configuration,"zrt");
//2.删除目录(删除在tmp目录下的zrt666目录)
fs.delete(new Path("/tmp/zrt666"),true);
//3.关闭资源
fs.close();
}
运行结果:
4.更改文件名
代码接上,共用引入的类就行,省的新建java文件,方便。
@Test
public void update() throws Exception{
//1.获取文件系统
FileSystem fs = FileSystem.get(new URI(IP),configuration,"zrt");
//2.让一个文件名重命名(让1.txt改为111.txt)
fs.rename(new Path("/tmp/userzrt/1.txt"),new Path("/tmp/userzrt/111.txt"));
//3.关闭资源
fs.close();
}
运行结果:
5.查看文件内容
代码接上,共用引入的类就行,省的新建java文件,方便。
@Test
public void show() throws Exception{
//1.获取文件系统
FileSystem fs = FileSystem.get(new URI(IP),configuration,"zrt");
//2.获取文件详情,找到HDFS里面的某个文件
RemoteIterator<LocatedFileStatus> listFiles = fs.listFiles(new Path("/tmp/userzrt/111.txt"),true);
//3.遍历
while (listFiles.hasNext()){
LocatedFileStatus status = listFiles.next();
//文件名
System.out.println(status.getPath().getName()+"");
//获取长度
System.out.println(status.getLen()+"");
//组别
System.out.println(status.getGroup());
System.out.println("************************");
//关闭资源
fs.close();
}
}
运行结果:
6.判断是文件还是目录
代码接上,共用引入的类就行,省的新建java文件,方便。
@Test
public void teat() throws Exception{
//1.获取文件系统
FileSystem fs = FileSystem.get(new URI(IP),configuration,"zrt");
//2.判断是目录还是文件
FileStatus[] listStatus = fs.listStatus(new Path("/tmp"));
for (FileStatus status : listStatus){
if (status.isFile()) {
System.out.println("文件" + status.getPath().getName());
}else {
System.out.println("目录" + status.getPath().getName());
}
}
//3.关闭资源
fs.close();
}
运行结果: