Hadoop(一)----HDFS的API操作

本文详细介绍了如何使用Hadoop的API进行HDFS操作,包括文件上传、下载、删除、重命名、查看文件详情以及判断文件和文件夹等核心功能。通过实例代码,清晰展示了每个操作的具体步骤。

HDFS文件上传

1、源代码`

@Test
public void testCopyFromLocalFile() throws IOException,InterruptedException,URISyntaxException{
	//1、获取文件系统
	Configuration configuration = new Configuration();
	configuration.set("dfs.replication","2");//副本数
	FileSystem fs = FileSystem.get(new URI("hdfs://hadoop101:9000"),configuration,"root");//写自己的hadoop机器和用户名
	//2、上传文件
	fs.copyFromLocalFile(new Path("d:/test.txt"),new Path("/test.txt")); //本地路径和hdfs路径
	//3、关闭
	fs.close();
	
	System.out.println("上传结束");
}

2、将hdfs-site.xml拷贝到项目的根目录下

HDFS文件下载

@Test
public void testCopyToLocalFile() throws IOException,InterruptedException,URISyntaxException{
	//1、获取文件系统
	Configuration configuration = new Configuration();
	FileSystem fs = FileSystem.get(new URI("hdfs://hadoop101:9000"),configuration,"root");//写自己的hadoop机器和用户名
	//2、下载文件
	fs.copyToLocalFile(false,new Path("/test.txt"),new Path("d:/test.txt"),true); 
	//3、关闭
	fs.close();
	
	System.out.println("下载结束");
}

HDFS文件夹删除

@Test
public void testDelete() throws IOException,InterruptedException,URISyntaxException{
	//1、获取文件系统
	Configuration configuration = new Configuration();
	FileSystem fs = FileSystem.get(new URI("hdfs://hadoop101:9000"),configuration,"root");/
	//2、删除文件
	fs.delete(new Path("/honglou.txt"),true);
	//3、关闭
	fs.close();
	
	System.out.println("删除结束");
}

HDFS文件名更改

@Test
public void rename() throws IOException,InterruptedException,URISyntaxException{
	//1、获取文件系统
	Configuration configuration = new Configuration();
	FileSystem fs = FileSystem.get(new URI("hdfs://hadoop101:9000"),configuration,"root");//写自己的hadoop机器和用户名
	//2、修改文件名
	fs.rename(new Path("/1.txt"),new Path("/2.txt"));
	//3、关闭
	fs.close();
}

HDFS文件详情查看

@Test
public void testListFiles() throws IOException,InterruptedException,URISyntaxException{
	//1、获取文件系统
	Configuration configuration = new Configuration();
	FileSystem fs = FileSystem.get(new URI("hdfs://hadoop101:9000"),configuration,"root");
	//2、文件详情
	RemoteIterator<LocatedFileStatus> listFiles = fs.listFiles(new Path("/"),true);

	while(listFiles.hasNext()){
	LocatedFileStatus status = listFiles.next();

	//输出详情
	//文件名称
	System.out.println(status.getPath().getName());
	//长度
	System.out.println(status.getLen());
	//权限
	System.out.println(status.getPermission());
	//分组
	System.out,println(status.getGroup());
	
	//获取存储的块信息(注意:文件夹没有block)
	BlockLocation[] blockLocations = status.getBlockLocation();
	for(BlockLocation blockLocation:blockLocations){
		//获取块存储的主机节点
		String[] hosts = blockLocation.getHosts();
		for(String host :hosts){
		System.out.println(host);
		}
	}
	System.out.println("====分割线====");
	}
	//3、关闭
	fs.close();
}

HDFS文件和文件夹判断

@Test
public void testListStatus() throws IOException,InterruptedException,URISyntaxException{
	//1、获取文件系统
	Configuration configuration = new Configuration();
	FileSystem fs = FileSystem.get(new URI("hdfs://hadoop101:9000"),configuration,"root");
	//2、判断是文件还是文件夹
	FileStatus[] fileStatus = fs.listStatus(new Path("/"));
	
	for(FileStatus fileStatus : listStatus){
		//如果是文件
		if(fileStatus.isFile()){
			System.out.println("f:"+fileStatus.getPath().getName());
		}else{
		System.out.println("d:"+fileStatus.getPath().getName());
		}
	}
	//3、关闭
	fs.close();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值