本文仅记录上传文件、下载文件和删除文件三个操作。这三个操作有着相似的逻辑,都是先创建配置对象,然后获取操作HDFS的对象,最后再进行各自的功能实现。
1. 上传文件到HDFS
创建配置对象后,指定HDFS的地址,随后获取操作HDFS的对象,在该对象的基础上获取HDFS的输出流,最后通过工具类实现把本地输入流拷贝到HDFS输出流里面,实现本地文件上传到HDFS。
//创建配置对象
Configuration conf = new Configuration();
//指定HDFS的地址
conf.set("fs.defaultFS", "hdfs://bigData01:9000");
//获取操作hdfs的对象
FileSystem fileSystem = FileSystem.get(conf);
//获取HDFS的输出流
FSDataOutputStream fos = fileSystem.create(new Path("/win11.txt"));
//获取本地文件的输入流
FileInputStream fis = new FileInputStream("D:\\win11.txt");
//上传文件:通过工具类实现把输入流拷贝到输出流里面,实现本地文件上传到HDFS
IOUtils.copyBytes(fis, fos, 1024, true);
2. 下载HDFS文件
创建配置对象后,指定HDFS的地址,随后获取操作HDFS的对象,在该对象的基础上获取HDFS的输入流,最后通过工具类实现把HDFS输入流拷贝到本地输出流里面,实现HDFS文件下载到本地。
//创建配置对象
Configuration conf = new Configuration();
//指定HDFS的地址
conf.set("fs.defaultFS", "hdfs://bigData01:9000");
//获取操作hdfs的对象
FileSystem fileSystem = FileSystem.get(conf);
//获取HDFS系统输入流
FSDataInputStream fis= fileSystem.open(new Path("/LICENSE.txt"));
//获取本地系统的输出流
FileOutputStream fos = new FileOutputStream("D:\\LICENSE.txt");
//下载文件
IOUtils.copyBytes(fis, fos, 1024, true);
3. 删除HDFS文件
fileSystem.delete()
的第一个参数是HDFS中的文件地址,第二个参数代表递归删除,若要删除目录,则第二个参数有用,若删除的是文件,则忽略第二个参数。
//创建配置对象
Configuration conf = new Configuration();
//指定HDFS的地址
conf.set("fs.defaultFS", "hdfs://bigData01:9000");
//获取操作hdfs的对象
FileSystem fileSystem = FileSystem.get(conf);
boolean flag = fileSystem.delete(new Path("/LICENSE.txt"), true);
if(flag){
System.out.println("删除成功");
}else{
System.out.println("删除失败");
}