[Hadoop]HDFS文件的相关操作(上传、新建、删除和重命名)

本文提供了一个Java示例程序,演示如何使用Hadoop HDFS API进行文件的基本操作,包括文件复制、创建、重命名及删除等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package com.hadooplearn.test;
import java.io.FileOutputStream;
import java.io.IOException;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
//学习HDFS的使用
public class HdfsLearn {
	//复制文件,从本地到HDFS
	public void copyFile(String src,String dst){
		Configuration conf = new Configuration();
		conf.set("mapred.job.tracker", "localhost:9001");  
        conf.set("fs.default.name", "hdfs://localhost:9000");
		FileSystem hdfs = null;
		try {
			hdfs = FileSystem.get(conf);
			Path srcPath = new Path(src);
			Path dstPath = new Path(dst);
			hdfs.copyFromLocalFile(srcPath, dstPath);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally{
			if(hdfs != null){
				try {
					hdfs.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
	}
	
	//创建新文件
	public void createFile(String dst){
		Configuration conf = new Configuration();
		conf.set("mapred.job.tracker","localhost:9001");
		conf.set("fs.default.name","hdfs://localhost:9000");
		FileSystem fs = null;
		FSDataOutputStream out = null;
		try{
			String content = "hello hadoop";
			Path path = new Path(dst);
			fs = FileSystem.get(conf);
			out = fs.create(path);
			out.write(content.getBytes());
			out.flush();
		}catch(Exception ex){
			ex.printStackTrace();
		}finally{
			if(out != null){
				try {
					out.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			if(fs != null){
				try {
					fs.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
	}
	
	public void renameFile(String str,String dst){
		Configuration conf = new Configuration();
		conf.set("mapred.job.tracker","localhost:9001");
		conf.set("fs.default.name","hdfs://localhost:9000");
		FileSystem fs = null;
		try{
			fs = FileSystem.get(conf);
			Path srcPath = new Path(str);
			Path dstPath = new Path(dst);
			fs.rename(srcPath, dstPath);
		}catch(Exception ex){
			ex.printStackTrace();
		}finally{
			if(fs != null){
				try {
					fs.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
	}
	
	public void deleteFile(String src){
		Configuration conf = new Configuration();
		conf.set("mapred.job.tracker","localhost:9001");
		conf.set("fs.default.name","hdfs://localhost:9000");
		FileSystem fs = null;
		try{
			fs = FileSystem.get(conf);
			fs.delete(new Path(src));
		}catch(Exception ex){
			ex.printStackTrace();
		}finally{
			if(fs != null){
				try {
					fs.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
	}
	
	public static void main(String[] args){
		System.setProperty("HADOOP_USER_NAME", "pijing");
		String src = "/home/pijing/input/test1";
		String dst = "/";
		HdfsLearn learn = new HdfsLearn();
//		learn.copyFile(src, dst);
//		System.out.println("copy file from local file system to HDFS");
//		learn.createFile("/test2");
//		System.out.println("create file test2");
//		String org = "/test2";
//		String lasted = "/test3";
//		learn.renameFile(org, lasted);
//		System.out.println("rename file /test2 to /test3");
		learn.deleteFile("/test3");
		System.out.println("delete file /test3");
	}
}

### Hadoop HDFS API 文档接口说明 #### 使用HDFS Java API进行文件操作 为了通过Java程序访问HDFS中的资源,可以使用`FileSystem`类提供的方法。此过程始于创建一个表示集群配置的对象——通常是`Configuration`实例[^3]。 ```java import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; // 创建一个新的配置对象,默认加载默认的hadoop配置参数 Configuration conf = new Configuration(); conf.set("fs.defaultFS", "hdfs://namenode:8020"); // 设置NameNode地址 try { FileSystem fs = FileSystem.get(conf); // 获取文件系统的实例 } catch (IOException e) { e.printStackTrace(); } ``` 一旦有了`FileSystem`对象,就可以执行多种类型的文件系统调用了,比如读写文件、管理目录结构等。下面是一些常见的API函数: - **创建新文件** `create(Path f)` 方法用于在指定路径下新建并打开文件准备写入数据流。 - **删除现有文件或目录** 可以使用 `delete(Path p, boolean recursive)` 函数移除单个文件或是整个子树(当recursive设为true时)。 - **重命名文件或移动文件夹** 调用 `rename(Path src, Path dst)` 来改变名称或者迁移位置。 - **列出某个目录下的内容** 利用 `listStatus(Path path)` 返回该路径所指向的所有条目列表。 对于更复杂的场景,还可以探索其他高级特性如权限控制、属性设置等功能。 除了上述基本的操作外,还有专门处理大容量二进制数据传输的方法,例如可以通过`FileOutputStream`配合缓冲区实现高效的数据上传HDFS[^2]。 ```java import java.io.FileOutputStream; import org.apache.hadoop.fs.FSDataInputStream; import org.apache.hadoop.fs.Path; Path hdfsFilePath = new Path("/user/hadoop/sample.txt"); FSDataInputStream inputStream = null; FileOutputStream fos = null; try { inputStream = fs.open(hdfsFilePath); fos = new FileOutputStream(localDestinationPath); byte[] buffer = new byte[1024]; int bytesRead = -1; while ((bytesRead = inputStream.read(buffer)) != -1) { fos.write(buffer, 0, bytesRead); } } finally { if(inputStream!=null){ inputStream.close(); } if(fos!=null){ fos.close(); } } ``` 这段代码展示了如何从HDFS下载文件到本地磁盘的过程。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值