接上文————> 基于hadoop2.7.x centos7.x idea2023.3
目录:一.API操作配置1.给idea项目添加hadoop中的jar包2.导入jar包二.Io操作(上传/下载)1.上传2.下载三.其他操作1.获取文件系统2.创建目录3.删除目录4.更改文件名5.查看文件内容6.判断是文件还是目录
一.API操作配置
项目结构:
1.给idea项目添加hadoop中的jar包jar包点击下载
2.导入jar包选择hadoop安装包share下的整个hadoop包里面的jar文件全部导入
将hadoop.dll文件拷贝到C:/Windows/System32目录下,最后重启电脑。(这里在安装配置Windows的hadoop的时候已经拷贝)
二.Io操作(上传/下载)记得项目内配置Maven,这里之前已经配置
1.上传hadoop依赖(把下列代码放入pom.xml中)
junit junit 4.12 test点击刷新一下依赖:
新建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:2023/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"; //获取文件系统 @Testpublic 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 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(); }运行结果: