HDFS编程 - 使用HDFS Java API进行文件操作

news2025/1/12 0:39:17

文章目录

  • 前言
  • 一、创建hdfs-demo项目
    • 1. 在idea上创建maven项目
    • 2. 导入hadoop相关依赖
  • 二、常用 HDFS Java API
    • 1. 简介
    • 2. 获取文件系统实例
    • 3. 创建目录
    • 4. 创建文件
      • 4.1 创建文件并写入数据
      • 4.2 创建新空白文件
    • 5. 查看文件内容
    • 6. 查看目录下的文件或目录信息
      • 6.1 查看指定目录下的文件或目录信息
      • 6.2 递归查看指定目录下的所有文件信息
      • 6.3 查看指定路径信息
    • 7. 文件上传
    • 8. 向文件追加内容
    • 9. 文件下载
    • 10. 移动或重命名
    • 11. 复制或重命名文件
    • 12. 删除文件或目录
      • 12.1 删除文件
      • 12.1 删除目录
    • 13. 检查路径是否存在


前言

本文将详细介绍如何使用Java编程语言与HDFS进行交互。我们将通过创建一个简单的Maven项目,逐步演示HDFS的常用Java API,包括创建目录、上传和下载文件、查看文件内容、删除文件等操作。通过这些示例,读者将能够掌握基本的HDFS操作,并为后续的大数据处理打下坚实的基础。


一、创建hdfs-demo项目

1. 在idea上创建maven项目

打开idea新建项目,如下图。

在这里插入图片描述

选择Java项目,输入项目名称,选择构建系统为Maven,选择JDK为1.8,然后点击创建。

在这里插入图片描述

2. 导入hadoop相关依赖

如下图所示,在pom.xml文件中添加Hadoop相关依赖。

在这里插入图片描述


二、常用 HDFS Java API

1. 简介

Hadoop分布式文件系统(HDFS)是Apache Hadoop的核心组件之一,设计用于存储大量的数据,并提供高吞吐量的数据访问。HDFS Java API为开发者提供了直接与HDFS交互的能力,允许执行诸如创建目录、上传和下载文件、读取和写入文件等操作。

2. 获取文件系统实例

编写一个getFs方法,用于返回一个文件系统实例。

public static FileSystem getFs() throws IOException, InterruptedException {
    // 1. 创建Hadoop配置对象,并设置配置信息
    Configuration conf = new Configuration();
    conf.set("fs.defaultFS", "hdfs://192.168.121.100:9000");
    conf.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem");
    // 2. 获取文件系统实例,设置文件路径
    return FileSystem.get(URI.create(""), conf, "root");
}

在这里插入图片描述

3. 创建目录

可以使用mkdirs()方法来创建新的目录。

package org.example;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.fs.permission.FsPermission;

import java.io.IOException;
import java.net.URI;

public class Main {
    public static void main(String[] args) throws IOException, InterruptedException {
        FileSystem fs = getFs();
        // 创建目录/test/demo
        boolean mkdirs = fs.mkdirs(new Path("/test/demo"));
        if (mkdirs) {
            System.out.println("===============创建目录成功===============");
        } else {
            System.out.println("===============创建目录失败===============");
        }
        // 创建目录/test/demo2,并设置权限为777
        boolean mkdirs2 = fs.mkdirs(new Path("/test/demo2"), new FsPermission("777"));
        if (mkdirs2) {
            System.out.println("===============创建目录并设置权限成功===============");
        } else {
            System.out.println("===============创建目录并设置权限失败===============");
        }

        // 关闭文件系统
        fs.close();
    }

    public static FileSystem getFs() throws IOException, InterruptedException {
        // 1. 创建Hadoop配置对象,并设置配置信息
        Configuration conf = new Configuration();
        conf.set("fs.defaultFS", "hdfs://192.168.121.100:9000");
        conf.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem");
        // 2. 获取文件系统实例,设置文件路径
        return FileSystem.get(URI.create(""), conf, "root");
    }

}

执行结果如下图所示:

在这里插入图片描述

4. 创建文件

4.1 创建文件并写入数据

可以使用create()方法来创建文件并写入数据。

package org.example;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;

import java.io.IOException;
import java.net.URI;

public class Main {
    public static void main(String[] args) throws IOException, InterruptedException {
        FileSystem fs = getFs();
        // 创建文件/test/demo/text.txt,并向文件中写入数据
        FSDataOutputStream fsDataOutputStream = fs.create(new Path("/test/demo/text.txt"));
        String dataStr = "这是写入文件/test/demo/text.txt的示例数据\n";
        fsDataOutputStream.write(dataStr.getBytes());
        System.out.println("===============创建文件并写入数据成功===============");
        // 关闭文件系统
        fs.close();
    }

    public static FileSystem getFs() throws IOException, InterruptedException {
        // 1. 创建Hadoop配置对象,并设置配置信息
        Configuration conf = new Configuration();
        conf.set("fs.defaultFS", "hdfs://192.168.121.100:9000");
        conf.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem");
        // 2. 获取文件系统实例,设置文件路径
        return FileSystem.get(URI.create(""), conf, "root");
    }

}

4.2 创建新空白文件

可以使用createNewFile()方法来创建新空白文件。

package org.example;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;

import java.io.IOException;
import java.net.URI;

public class Main {
    public static void main(String[] args) throws IOException, InterruptedException {
        FileSystem fs = getFs();
        // 创建新空白文件/test/demo/text01.txt
        boolean newFile = fs.createNewFile(new Path("/test/demo/text01.txt"));
        if (newFile) {
            System.out.println("===============创建新空白文件成功===============");
        } else {
            System.out.println("===============创建新空白文件失败===============");
        }
        // 关闭文件系统
        fs.close();
    }

    public static FileSystem getFs() throws IOException, InterruptedException {
        // 1. 创建Hadoop配置对象,并设置配置信息
        Configuration conf = new Configuration();
        conf.set("fs.defaultFS", "hdfs://192.168.121.100:9000");
        conf.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem");
        // 2. 获取文件系统实例,设置文件路径
        return FileSystem.get(URI.create(""), conf, "root");
    }

}

5. 查看文件内容

可以使用open()方法来打开文件并读取文件内容。

package org.example;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URI;

public class Main {
    public static void main(String[] args) throws IOException, InterruptedException {
        FileSystem fs = getFs();
        // 打开文件/test/demo/text.txt,并读取文件内容
        FSDataInputStream open = fs.open(new Path("/test/demo/text.txt"));
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(open));
        System.out.println("===============文件内容如下:===============");
        String line;
        while ((line = bufferedReader.readLine()) != null) {
            System.out.println(line);
        }
        // 关闭文件系统
        fs.close();
    }

    public static FileSystem getFs() throws IOException, InterruptedException {
        // 1. 创建Hadoop配置对象,并设置配置信息
        Configuration conf = new Configuration();
        conf.set("fs.defaultFS", "hdfs://192.168.121.100:9000");
        conf.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem");
        // 2. 获取文件系统实例,设置文件路径
        return FileSystem.get(URI.create(""), conf, "root");
    }

}

执行结果如下图所示:

在这里插入图片描述

6. 查看目录下的文件或目录信息

6.1 查看指定目录下的文件或目录信息

可以使用listStatus()方法来查看目录下的文件或目录信息。

package org.example;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.fs.permission.FsPermission;

import java.io.IOException;
import java.net.URI;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;

public class Main {
    public static void main(String[] args) throws IOException, InterruptedException {
        FileSystem fs = getFs();
        // 查看目录/test下的文件或目录信息
        FileStatus[] fileStatuses = fs.listStatus(new Path("/test"));
        for (FileStatus fileStatus : fileStatuses) {
            System.out.println("===============文件或目录信息如下:===============");
            FsPermission permission = fileStatus.getPermission();
            short replication = fileStatus.getReplication();
            String owner = fileStatus.getOwner();
            String group = fileStatus.getGroup();
            long size = fileStatus.getLen();
            long blockSize = fileStatus.getBlockSize();
            LocalDateTime localDateTime = Instant.ofEpochMilli(fileStatus.getAccessTime()).atZone(ZoneOffset.systemDefault()).toLocalDateTime();
            String accessTime = localDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
            Path path = fileStatus.getPath();
            System.out.println("权限:" + permission + "\t" + "副本数:" + replication + "\t" + "所有者:" + owner + "\t" + "群组:" + group);
            System.out.println("大小:" + size + "\t" + "块大小:" + blockSize + "\t" + "访问时间:" + accessTime + "\t" + "路径:" + path);
        }
        // 关闭文件系统
        fs.close();
    }

    public static FileSystem getFs() throws IOException, InterruptedException {
        // 1. 创建Hadoop配置对象,并设置配置信息
        Configuration conf = new Configuration();
        conf.set("fs.defaultFS", "hdfs://192.168.121.100:9000");
        conf.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem");
        // 2. 获取文件系统实例,设置文件路径
        return FileSystem.get(URI.create(""), conf, "root");
    }

}

执行结果如下图所示:

在这里插入图片描述

6.2 递归查看指定目录下的所有文件信息

可以使用listFiles()方法来递归查看指定目录下的所有文件信息。

package org.example;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.*;
import org.apache.hadoop.fs.permission.FsPermission;

import java.io.IOException;
import java.net.URI;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;

public class Main {
    public static void main(String[] args) throws IOException, InterruptedException {
        FileSystem fs = getFs();
        // 递归查看目录/test下的所有文件信息
        RemoteIterator<LocatedFileStatus> listFiles = fs.listFiles(new Path("/test"), true);
        while (listFiles.hasNext()) {
            FileStatus fileStatus = listFiles.next();
            System.out.println("===============文件或目录信息如下:===============");
            FsPermission permission = fileStatus.getPermission();
            short replication = fileStatus.getReplication();
            String owner = fileStatus.getOwner();
            String group = fileStatus.getGroup();
            long size = fileStatus.getLen();
            long blockSize = fileStatus.getBlockSize();
            LocalDateTime localDateTime = Instant.ofEpochMilli(fileStatus.getAccessTime()).atZone(ZoneOffset.systemDefault()).toLocalDateTime();
            String accessTime = localDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
            Path path = fileStatus.getPath();
            System.out.println("权限:" + permission + "\t" + "副本数:" + replication + "\t" + "所有者:" + owner + "\t" + "群组:" + group);
            System.out.println("大小:" + size + "\t" + "块大小:" + blockSize + "\t" + "访问时间:" + accessTime + "\t" + "路径:" + path);
        }
        // 关闭文件系统
        fs.close();
    }

    public static FileSystem getFs() throws IOException, InterruptedException {
        // 1. 创建Hadoop配置对象,并设置配置信息
        Configuration conf = new Configuration();
        conf.set("fs.defaultFS", "hdfs://192.168.121.100:9000");
        conf.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem");
        // 2. 获取文件系统实例,设置文件路径
        return FileSystem.get(URI.create(""), conf, "root");
    }

}

执行结果如下图所示:

在这里插入图片描述

6.3 查看指定路径信息

可以使用getFileStatus()方法来查看指定路径信息。

package org.example;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.fs.permission.FsPermission;

import java.io.IOException;
import java.net.URI;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;

public class Main {
    public static void main(String[] args) throws IOException, InterruptedException {
        FileSystem fs = getFs();
        // 查看目录/test的信息
        FileStatus fileStatus = fs.getFileStatus(new Path("/test"));
        System.out.println("===============路径信息如下:===============");
        FsPermission permission = fileStatus.getPermission();
        short replication = fileStatus.getReplication();
        String owner = fileStatus.getOwner();
        String group = fileStatus.getGroup();
        long size = fileStatus.getLen();
        long blockSize = fileStatus.getBlockSize();
        LocalDateTime localDateTime = Instant.ofEpochMilli(fileStatus.getAccessTime()).atZone(ZoneOffset.systemDefault()).toLocalDateTime();
        String accessTime = localDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
        Path path = fileStatus.getPath();
        System.out.println("权限:" + permission + "\t" + "副本数:" + replication + "\t" + "所有者:" + owner + "\t" + "群组:" + group);
        System.out.println("大小:" + size + "\t" + "块大小:" + blockSize + "\t" + "访问时间:" + accessTime + "\t" + "路径:" + path);
        // 关闭文件系统
        fs.close();
    }

    public static FileSystem getFs() throws IOException, InterruptedException {
        // 1. 创建Hadoop配置对象,并设置配置信息
        Configuration conf = new Configuration();
        conf.set("fs.defaultFS", "hdfs://192.168.121.100:9000");
        conf.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem");
        // 2. 获取文件系统实例,设置文件路径
        return FileSystem.get(URI.create(""), conf, "root");
    }

}

执行结果如下图所示:

在这里插入图片描述

7. 文件上传

可以使用copyFromLocalFile()方法从本地上传文件到hdfs。

package org.example;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;

import java.io.IOException;
import java.net.URI;

public class Main {
    public static void main(String[] args) throws IOException, InterruptedException {
        FileSystem fs = getFs();
        // 把本地文件D:\shiyan.csv上传到hdfs的/test/demo目录,上传后不删除本地文件D:\shiyan.csv
        fs.copyFromLocalFile(new Path("D:\\shiyan.csv"), new Path("/test/demo"));
        // 把本地文件D:\shiyan.csv上传到hdfs的/test/demo目录,上传后不删除本地文件D:\shiyan.csv,且如果hdfs上存在相同的文件则覆盖
        // fs.copyFromLocalFile(false, true, new Path("D:\\shiyan.csv"), new Path("/test/demo"));
        System.out.println("===============文件上传成功===============");
        // 关闭文件系统
        fs.close();
    }

    public static FileSystem getFs() throws IOException, InterruptedException {
        // 1. 创建Hadoop配置对象,并设置配置信息
        Configuration conf = new Configuration();
        conf.set("fs.defaultFS", "hdfs://192.168.121.100:9000");
        conf.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem");
        // 2. 获取文件系统实例,设置文件路径
        return FileSystem.get(URI.create(""), conf, "root");
    }

}

8. 向文件追加内容

可以使用append()方法追加内容到hdfs上的指定文件。

package org.example;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;

import java.io.IOException;
import java.net.URI;

public class Main {
    public static void main(String[] args) throws IOException, InterruptedException {
        FileSystem fs = getFs();
        // 向hdfs上文件/test/demo/text01.txt写入数据
        FSDataOutputStream fsDataOutputStream = fs.append(new Path("/test/demo/text01.txt"));
        // 把9,7,6,7,9写入文件/test/demo/text01.txt并换行
        fsDataOutputStream.write("9,7,6,7,9\n".getBytes());
        // 把缓冲区数据刷入文件
        fsDataOutputStream.flush();
        // 关闭资源
        fsDataOutputStream.close();
        System.out.println("===============追加数据到文件成功===============");
        // 关闭文件系统
        fs.close();
    }

    public static FileSystem getFs() throws IOException, InterruptedException {
        // 1. 创建Hadoop配置对象,并设置配置信息
        Configuration conf = new Configuration();
        conf.set("fs.defaultFS", "hdfs://192.168.121.100:9000");
        conf.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem");
        // 2. 获取文件系统实例,设置文件路径
        return FileSystem.get(URI.create(""), conf, "root");
    }

}

9. 文件下载

可以使用copyToLocalFile()方法从hdfs下载文件到本地。

package org.example;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;

import java.io.IOException;
import java.net.URI;

public class Main {
    public static void main(String[] args) throws IOException, InterruptedException {
        FileSystem fs = getFs();
        // 把hdfs上文件/test/demo/text01.txt下载到本地D:\目录
        fs.copyToLocalFile(new Path("/test/demo/text01.txt"), new Path("D:\\"));
        System.out.println("===============文件下载成功===============");
        // 关闭文件系统
        fs.close();
    }

    public static FileSystem getFs() throws IOException, InterruptedException {
        // 1. 创建Hadoop配置对象,并设置配置信息
        Configuration conf = new Configuration();
        conf.set("fs.defaultFS", "hdfs://192.168.121.100:9000");
        conf.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem");
        // 2. 获取文件系统实例,设置文件路径
        return FileSystem.get(URI.create(""), conf, "root");
    }

}

10. 移动或重命名

可以使用rename()方法来移动或重命名文件。

package org.example;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;

import java.io.IOException;
import java.net.URI;

public class Main {
    public static void main(String[] args) throws IOException, InterruptedException {
        FileSystem fs = getFs();
        // 把hdfs上文件/test/demo/text.txt重命名为/test/demo/text02.txt
        boolean rename = fs.rename(new Path("/test/demo/text.txt"), new Path("/test/demo/text02.txt"));
        if (rename) {
            System.out.println("===============文件重命名成功===============");
        } else {
            System.out.println("===============文件重命名失败===============");
        }
        // 把hdfs上文件/test/demo/text01.txt移动到/test/demo2目录
        boolean rename2 = fs.rename(new Path("/test/demo/text02.txt"), new Path("/test/demo2"));
        if (rename2) {
            System.out.println("===============文件移动成功===============");
        } else {
            System.out.println("===============文件移动失败===============");
        }
        // 关闭文件系统
        fs.close();
    }

    public static FileSystem getFs() throws IOException, InterruptedException {
        // 1. 创建Hadoop配置对象,并设置配置信息
        Configuration conf = new Configuration();
        conf.set("fs.defaultFS", "hdfs://192.168.121.100:9000");
        conf.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem");
        // 2. 获取文件系统实例,设置文件路径
        return FileSystem.get(URI.create(""), conf, "root");
    }

}

执行结果如下图所示:

在这里插入图片描述

11. 复制或重命名文件

可以使用FileUtil.copy()方法来复制或重命名文件。

package org.example;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.FileUtil;
import org.apache.hadoop.fs.Path;

import java.io.IOException;
import java.net.URI;

public class Main {
    public static void main(String[] args) throws IOException, InterruptedException {
        FileSystem fs = getFs();
        // 把hdfs上文件/test/demo/text01.txt复制到/test/demo2目录
        boolean copy = FileUtil.copy(fs, new Path("/test/demo/text01.txt"), fs, new Path("/test/demo2"), false, true, fs.getConf());
        if (copy) {
            System.out.println("===============复制文件成功===============");
        } else {
            System.out.println("===============复制文件失败===============");
        }
        // 把hdfs上文件/test/demo/text01.txt复制并重命名为/test/demo2/text03.txt
        boolean copy2 = FileUtil.copy(fs, new Path("/test/demo/text01.txt"), fs, new Path("/test/demo2/text03.txt"), false, true, fs.getConf());
        if (copy2) {
            System.out.println("===============复制文件并重命名成功===============");
        } else {
            System.out.println("===============复制文件并重命名失败===============");
        }
        // 关闭文件系统
        fs.close();
    }

    public static FileSystem getFs() throws IOException, InterruptedException {
        // 1. 创建Hadoop配置对象,并设置配置信息
        Configuration conf = new Configuration();
        conf.set("fs.defaultFS", "hdfs://192.168.121.100:9000");
        conf.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem");
        // 2. 获取文件系统实例,设置文件路径
        return FileSystem.get(URI.create(""), conf, "root");
    }

}

执行结果如下图所示:

在这里插入图片描述

12. 删除文件或目录

12.1 删除文件

可以使用delete()方法来删除文件。

package org.example;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;

import java.io.IOException;
import java.net.URI;

public class Main {
    public static void main(String[] args) throws IOException, InterruptedException {
        FileSystem fs = getFs();
        // 删除hdfs上文件/test/demo2/text03.txt
        boolean delete = fs.delete(new Path("/test/demo2/text03.txt"), false);
        if (delete) {
            System.out.println("===============删除文件成功===============");
        } else {
            System.out.println("===============删除文件失败===============");
        }
        // 关闭文件系统
        fs.close();
    }

    public static FileSystem getFs() throws IOException, InterruptedException {
        // 1. 创建Hadoop配置对象,并设置配置信息
        Configuration conf = new Configuration();
        conf.set("fs.defaultFS", "hdfs://192.168.121.100:9000");
        conf.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem");
        // 2. 获取文件系统实例,设置文件路径
        return FileSystem.get(URI.create(""), conf, "root");
    }

}

12.1 删除目录

可以使用delete()方法来删除目录。

package org.example;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;

import java.io.IOException;
import java.net.URI;

public class Main {
    public static void main(String[] args) throws IOException, InterruptedException {
        FileSystem fs = getFs();
        // 递归删除hdfs上目录/test/demo2
        boolean delete = fs.delete(new Path("/test/demo2"), true);
        if (delete) {
            System.out.println("===============删除目录成功===============");
        } else {
            System.out.println("===============删除目录失败===============");
        }
        // 关闭文件系统
        fs.close();
    }

    public static FileSystem getFs() throws IOException, InterruptedException {
        // 1. 创建Hadoop配置对象,并设置配置信息
        Configuration conf = new Configuration();
        conf.set("fs.defaultFS", "hdfs://192.168.121.100:9000");
        conf.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem");
        // 2. 获取文件系统实例,设置文件路径
        return FileSystem.get(URI.create(""), conf, "root");
    }

}

13. 检查路径是否存在

可以使用exists()方法来检查路径是否存在。

package org.example;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;

import java.io.IOException;
import java.net.URI;

public class Main {
    public static void main(String[] args) throws IOException, InterruptedException {
        FileSystem fs = getFs();
        // 检查路径/test/demo是否存在
        boolean exists = fs.exists(new Path("/test/demo"));
        if (exists) {
            System.out.println("===============路径存在===============");
        } else {
            System.out.println("===============路径不存在===============");
        }
        // 关闭文件系统
        fs.close();
    }

    public static FileSystem getFs() throws IOException, InterruptedException {
        // 1. 创建Hadoop配置对象,并设置配置信息
        Configuration conf = new Configuration();
        conf.set("fs.defaultFS", "hdfs://192.168.121.100:9000");
        conf.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem");
        // 2. 获取文件系统实例,设置文件路径
        return FileSystem.get(URI.create(""), conf, "root");
    }

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2275200.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java面试题~~

深拷贝和浅拷贝区别了解吗?什么是引用拷贝? 关于深拷贝和浅拷贝区别&#xff0c;我这里先给结论&#xff1a; 浅拷贝&#xff1a;浅拷贝会在堆上创建一个新的对象&#xff08;区别于引用拷贝的一点&#xff09;&#xff0c;不过&#xff0c;如果原对象内部的属性是引用类型的…

el-table 自定义表头颜色

第一种方法&#xff1a;计算属性 <template><div><el-table:data"formData.detail"border stripehighlight-current-row:cell-style"{ text-align: center }":header-cell-style"headerCellStyle"><el-table-column fixed…

MySQL笔记大总结20250108

Day2 1.where (1)关系运算符 select * from info where id>1; select * from info where id1; select * from info where id>1; select * from info where id!1;(2)逻辑运算符 select * from info where name"吴佩奇" and age19; select * from info wh…

精选2款.NET开源的博客系统

前言 博客系统是一个便于用户创建、管理和分享博客内容的在线平台&#xff0c;今天大姚给大家分享2款.NET开源的博客系统。 StarBlog StarBlog是一个支持Markdown导入的开源博客系统&#xff0c;后端基于最新的.Net6和Asp.Net Core框架&#xff0c;遵循RESTFul接口规范&…

SEO内容优化:如何通过用户需求赢得搜索引擎青睐?

在谷歌SEO优化中&#xff0c;内容一直是最重要的因素之一。但要想让内容真正发挥作用&#xff0c;关键在于满足用户需求&#xff0c;而不是简单地堆砌关键词。谷歌的算法越来越智能化&#xff0c;更注重用户体验和内容的实用性。 了解目标用户的需求。通过工具如Google Trends…

Spring——自动装配

假设一个场景&#xff1a; 一个人&#xff08;Person&#xff09;有一条狗&#xff08;Dog&#xff09;和一只猫(Cat)&#xff0c;狗和猫都会叫&#xff0c;狗叫是“汪汪”&#xff0c;猫叫是“喵喵”&#xff0c;同时人还有一个自己的名字。 将上述场景 抽象出三个实体类&…

计算机网络(三)——局域网和广域网

一、局域网 特点&#xff1a;覆盖较小的地理范围&#xff1b;具有较低的时延和误码率&#xff1b;使用双绞线、同轴电缆、光纤传输&#xff0c;传输效率高&#xff1b;局域网内各节点之间采用以帧为单位的数据传输&#xff1b;支持单播、广播和多播&#xff08;单播指点对点通信…

错误的类文件: *** 类文件具有错误的版本 61.0, 应为 52.0 请删除该文件或确保该文件位于正确的类路径子目录中

一、问题 用maven对一个开源项目打包时&#xff0c;遇到了“错误的类文件: *** 类文件具有错误的版本 61.0, 应为 52.0 请删除该文件或确保该文件位于正确的类路径子目录中。”&#xff1a; 二、原因 原因是当前java环境是Java 8&#xff08;版本52.0&#xff09;&#xff0c;但…

【大模型入门指南 07】量化技术浅析

【大模型入门指南】系列文章&#xff1a; 【大模型入门指南 01】深度学习入门【大模型入门指南 02】LLM大模型基础知识【大模型入门指南 03】提示词工程【大模型入门指南 04】Transformer结构【大模型入门指南 05】LLM技术选型【大模型入门指南 06】LLM数据预处理【大模型入门…

在线工具箱源码优化版

在线工具箱 前言效果图部分源码源码下载部署教程下期更新 前言 来自缤纷彩虹天地优化后的我爱工具网源码&#xff0c;百度基本全站收录&#xff0c;更能基本都比较全&#xff0c;个人使用或是建站都不错&#xff0c;挑过很多工具箱&#xff0c;这个比较简洁&#xff0c;非常实…

@LocalBuilder装饰器: 维持组件父子关系

一、前言 当开发者使用Builder做引用数据传递时&#xff0c;会考虑组件的父子关系&#xff0c;使用了bind(this)之后&#xff0c;组件的父子关系和状态管理的父子关系并不一致。为了解决组件的父子关系和状态管理的父子关系保持一致的问题&#xff0c;引入LocalBuilder装饰器。…

C 语言内存探秘:数据存储的字节密码

文章目录 一、数据在内存中的存储1、基本数据类型存储2、数组存储3、结构体存储1、基本存储规则2、举例说明3、查看结构体大小和成员偏移量的方法 二、大小端字节序三、字节序的判断 一、数据在内存中的存储 1、基本数据类型存储 整型&#xff1a;如int类型&#xff0c;通常在…

双因素身份验证技术在NPI区域邮件安全管控上的解决思路

在制造业中&#xff0c;NPI&#xff08;New Product Introduction&#xff0c;新产品导入&#xff09;区域是指专门负责新产品从概念到市场推出全过程的部门或团队。NPI 的目标是确保新产品能够高效、高质量地投入生产&#xff0c;并顺利满足市场需求。在支撑企业持续创新和竞争…

浙江安吉成新的分布式光伏发电项目应用

摘 要&#xff1a;分布式光伏发电站是指将光伏发电组件安装在用户的建筑物屋顶、空地或其他适合的场地上&#xff0c;利用太阳能进行发电的一种可再生能源利用方式&#xff0c;与传统的大型集中式光伏电站相比&#xff0c;分布式光伏发电具有更灵活的布局、更低的建设成本和更高…

更新Office后,LabVIEW 可执行程序生成失败

问题描述&#xff1a; 在计算机中&#xff0c;LabVIEW 开发的源程序运行正常&#xff0c;但在生成可执行程序时提示以下错误&#xff1a; ​ A VI broke during the build process from being saved without a block diagram. Either open the build specification to include…

mysql-operator容器化部署mysql8

基础组件容器化 前一段时间容器化了容器的s3和pika。由于已经有开源方案&#xff0c;本次mysql直接以operator容器化。使用的是[presslabs的mysql-operator]https://github.com/presslabs/mysql-operator。 主要特征 presslabs/mysql-operator自动化搭建主从集群。使用XtraBack…

web-app uniapp监测屏幕大小的变化对数组一行展示数据作相应处理

web-app uniapp监测屏幕大小的变化对数组一行展示数据作相应处理 1.uni.getSystemInfoSync().screenWidth; 获取屏幕宽度 2.uni.onWindowResize&#xff08;&#xff09; 实时监测屏幕宽度变化 3.根据宽度的大小拿到每行要展示的数量itemsPerRow 4.为了确保样式能够根据 items…

[OPEN SQL] 限定选择行数

本次操作使用的数据库表为SCUSTOM&#xff0c;其字段内容如下所示 航班用户(SCUSTOM) 该数据库表中的部分值如下所示 指定查询多少行数据&#xff0c;我们可以使用语法UP TO n ROWS来实现对数据前n项的查询 语法格式 SELECT * FROM <dbtab> UP TO n ROWS 参数说明 db…

金融项目实战 02|接口测试分析、设计以及实现

目录 ⼀、接口相关理论 二、接口测试 1、待测接口&#xff1a;投资业务 2、接口测试流程 3、设计用例理论 1️⃣设计方法 2️⃣工具 4、测试点提取 5、测试用例&#xff08;只涉及了必测的&#xff09; 1️⃣注册图⽚验证码、注册短信验证码 2️⃣注册 3️⃣登录 …

74 mysql having 的实现

前言 这里 我们主要是 看一下 having 的相关实现 having 经常是配合 group by 这边进行使用, 进行一个基于 group by 之后的结果的一个, 条件限定 我们这里 以最简单的 group by having 来进行调试, 他会分为 两个阶段, 一个阶段是 group by 之后的结果输出到临时表, 另外…