常用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