常用JAVA操作HDFS集群的API开发

1.HDFS文件上传(测试副本数参数优先级)

1.代码:

	@Test
	public void testCopyFromLocalFile() throws IllegalArgumentException, IOException, InterruptedException, URISyntaxException {
		//1.获取文件系统
		Configuration configuration =new Configuration();
		configuration.set("dfs.replication", "2");
		FileSystem fSystem=FileSystem.get(new URI("hdfs://hadoop102:9000"), configuration, "lsl");
		//2.上传文件
		fSystem.copyFromLocalFile(new Path("D:\\idea.txt"), new Path("/idea.txt"));
		//3.关闭资源
		fSystem.close();
		System.out.println("执行完成");
	}

2.配置hdfs-site.xml,并拷贝到根目录下

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
	<property>
		<name>dfs.replication</name>
       	 	<value>1</value>
	</property>
</configuration>

3.参数优先级排序:客户端代码中设置的值 >ClassPath下的用户自定义配置文件 >然后是服务器的默认配置

2.HDFS文件下载

代码:

@Test
	public void testCopyToLocalFile() throws IOException, InterruptedException, URISyntaxException{
			// 1 获取文件系统
			Configuration configuration = new Configuration();
			FileSystem fs = FileSystem.get(new URI("hdfs://hadoop102:9000"), configuration, "lsl");
			
			// 2 执行下载操作
			// boolean delSrc 指是否将原文件删除
			// Path src 指要下载的文件路径
			// Path dst 指将文件下载到的路径
			// boolean useRawLocalFileSystem 是否开启文件校验
			fs.copyToLocalFile(false, new Path("/idea.txt"), new Path("D:\\dea.txt"), true);
			
			// 3 关闭资源
			fs.close();
			System.out.println("执行完成!");
	}

3.HDFS文件夹删除

代码:

	@Test
	public void testDelete() throws IOException, InterruptedException, URISyntaxException{
		// 1 获取文件系统
		Configuration configuration = new Configuration();
		FileSystem fs = FileSystem.get(new URI("hdfs://hadoop102:9000"), configuration, "lsl");
			
		// 2 执行删除
		fs.delete(new Path("/user/"),true);
			
		// 3 关闭资源
		fs.close();
		System.out.println("执行完成!");
	}

4.HDFS文件名更改

@Test
	public void testRename() throws IOException, InterruptedException, URISyntaxException{
		// 1 获取文件系统
		Configuration configuration = new Configuration();
		FileSystem fs = FileSystem.get(new URI("hdfs://hadoop102:9000"), configuration, "lsl"); 
			
		// 2 修改文件名称
		fs.rename(new Path("/idea.txt"), new Path("/banhua.txt"));
			
		// 3 关闭资源
		fs.close();
		System.out.println("执行完成!");
	}

5. HDFS文件详情查看

@Test
public void testListFiles() throws IOException, InterruptedException, URISyntaxException{
	// 1获取文件系统
	Configuration configuration = new Configuration();
	FileSystem fs = FileSystem.get(new URI("hdfs://hadoop102:9000"), configuration, "lsl"); 
		
	// 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());
			
		// 获取存储的块信息
		BlockLocation[] blockLocations = status.getBlockLocations();
			
		for (BlockLocation blockLocation : blockLocations) {
				
			// 获取块存储的主机节点
			String[] hosts = blockLocation.getHosts();
				
			for (String host : hosts) {
				System.out.println(host);
			}
		}
			
		System.out.println("-----------分割线----------");
	}
// 3 关闭资源
fs.close();
}

6.HDFS文件和文件夹判断

@Test
public void testListStatus() throws IOException, InterruptedException, URISyntaxException{
		
	// 1 获取文件配置信息
	Configuration configuration = new Configuration();
	FileSystem fs = FileSystem.get(new URI("hdfs://hadoop102:9000"), configuration, "lsl");
		
	// 2 判断是文件还是文件夹
	FileStatus[] listStatus = 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();
}

版权声明:本博客为记录本人自学感悟,转载需注明出处!
https://me.csdn.net/qq_39657909

猜你喜欢

转载自blog.csdn.net/qq_39657909/article/details/85013668