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

文章目录

  • 前言
  • 一、创建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");
    }

}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

直流无刷电机控制(FOC):电流模式

目录 概述 1 系统框架结构 1.1 硬件模块介绍 1.2 硬件实物图 1.3 引脚接口定义 2 代码实现 2.1 软件架构 2.2 电流检测函数 3 电流环功能实现 3.1 代码实现 3.2 测试代码实现 4 测试 概述 本文主要介绍基于DengFOC的库函数&#xff0c;实现直流无刷电机控制&#x…

51单片机——串口通信(重点)

1、通信 通信的方式可以分为多种&#xff0c;按照数据传送方式可分为串行通信和并行通信&#xff1b; 按照通信的数据同步方式&#xff0c;可分为异步通信和同步通信&#xff1b; 按照数据的传输方向又可分为单工、半双工和全双工通信 1.1 通信速率 衡量通信性能的一个非常…

如何在 Linux、MacOS 以及 Windows 中打开控制面板

控制面板不仅仅是一系列图标和菜单的集合&#xff1b;它是通往优化个人计算体验的大门。通过它&#xff0c;用户可以轻松调整从外观到性能的各种参数&#xff0c;确保他们的电脑能够完美地适应自己的需求。无论是想要提升系统安全性、管理硬件设备&#xff0c;还是简单地改变桌…

浅谈弱电系统RVVP和RVSP电缆的区别(

1、RVVP 1.1RVVP电缆定义&#xff1f; RVVP电缆抗干扰软电缆、屏蔽电缆、信号电缆、控制电缆&#xff08;名字很多&#xff09;&#xff0c;学名&#xff1a;铜芯-聚氯乙烯绝缘-屏蔽聚氯乙烯护套-软电缆。 1.2RVVP执行标准 主要执行标准为JB/T8734.5-2016&#xff0c;部…

Python的pandas库基础知识(超详细教学)

目录 一、配置环境 二、序列和数据表 2.1 初始化 2.2 获取数值 2.3 获取索引 2.4 索引取内容 2.5 索引改变取值 2.6 字典生成序列 2.7 计算取值出现次数 2.8 数据表 2.9 数据表添加新变量 2.10 获取列名 2.11 根据列名获取数据 2.12 输出固定行 2.13 输出多行…

Mysql--基础篇--SQL(DDL,DML,窗口函数,CET,视图,存储过程,触发器等)

SQL&#xff08;Structured Query Language&#xff0c;结构化查询语言&#xff09;是用于管理和操作关系型数据库的标准语言。它允许用户定义、查询、更新和管理数据库中的数据。SQL是一种声明性语言&#xff0c;用户只需要指定想要执行的操作&#xff0c;而不需要详细说明如何…

【Rust自学】11.5. 在测试中使用Result<T, E>

喜欢的话别忘了点赞、收藏加关注哦&#xff0c;对接下来的教程有兴趣的可以关注专栏。谢谢喵&#xff01;(&#xff65;ω&#xff65;) 11.5.1. 测试函数返回值为Result枚举 到目前为止&#xff0c;测试运行失败的原因都是因为触发了panic&#xff0c;但可以导致测试失败的…

【Linux】gawk编辑器

一、基本介绍 相较于sed编辑器来说&#xff0c;gawk提供了一种编程语言&#xff0c;而不仅仅是编辑器命令。 在gawk编程语言中&#xff0c;可以实现以下操作&#xff1a; 定义变量来保存数据&#xff1b;使用算术和字符串运算符来处理数据&#xff1b;使用结构化编程语法&…

Backend - C# asp .net core

目录 一、各大框架理解 &#xff08;一&#xff09;ASP.NET Core &#xff08;二&#xff09;ASP.NET Core Web Application &#xff08;三&#xff09;ASP.NET Core MVC &#xff08;四&#xff09;ASP.NET Core Web API &#xff08;五&#xff09;ASP.NET Core 和 EF …

麦田物语学习笔记:背包物品选择高亮显示和动画

如题,本篇文章没讲动画效果 基本流程 1.代码思路 (1)先用点击事件的接口函数去实现,点击后反转选择状态(isSelected),以及设置激活状态(SetActive),并且还需要判断该格子是否为空,空格子是点不动的,完成后以上后,出现的问题是高亮应该是有且仅有一个格子是高亮的,而现在可以让…

自定义音频播放样式结合Howler.js

滑动式滚动条 不使用audio默认样式 自定义音频播放样式 当前时间 开始时间 结束时间 可播放可暂停 滚动条可拖动进行同步 具体样式可调整npm install howler --save<template><div class"audio-player"><div v-if"isLoading" class"l…

基于 GEE 利用 DEM 数据计算坡度、坡向

目录 1 完整代码 2 运行结果 1 完整代码 以SRTM数据产品为例&#xff0c;代码如下&#xff1a; var roi table; var srtm ee.Image(USGS/SRTMGL1_003); var elevation srtm.select(elevation).clip(roi);// 计算坡度 var slope ee.Terrain.slope(elevation).clip(roi)…

Ubuntu 磁盘修复

Ubuntu 磁盘修复 在 ubuntu 文件系统变成只读模式&#xff0c;该处理呢&#xff1f; 文件系统内部的错误&#xff0c;如索引错误、元数据损坏等&#xff0c;也可能导致系统进入只读状态。磁盘坏道或硬件故障也可能引发文件系统只读的问题。/etc/fstab配置错误&#xff0c;可能…

夯实前端基础之CSS篇

知识点概览 这一篇是讲CSS的&#xff0c;前面还有一篇总结HTML的哦~夯实前端基础之HTML篇&#xff0c;后面还会更新其他系列哦~ 一、必知必会 1. html中引入样式的几种方式&#xff1f; 内联样式&#xff08;html元素的style属性&#xff09;内部样式表&#xff08;style标签…

conda/pip基本常用命令理解与整理

最近配置了两轮pytorch环境&#xff0c;由于要频繁用到各种conda和pip命令&#xff0c;所以再此整理一下。 文章目录 前言&#xff1a;conda虚拟环境总结与解读Conda和pip的理解区别和联系命令格式 conda环境命令查看创建和删除导出与导入激活和退出 包管理命令安装和删除文件批…

协方差矩阵

协方差矩阵是一个对称矩阵&#xff0c;用来描述多个随机变量之间的协方差关系。协方差反映了两个随机变量如何共同变化的趋势&#xff0c;协方差矩阵将这种关系扩展到了多维数据。 1. 定义 假设有一个 n 维随机向量 &#xff0c;协方差矩阵 Σ 定义为&#xff1a; 其中&#…

6 分布式限流框架

限流的作用 在API对外互联网开放的情况下&#xff0c;是无法控制调用方的行为的。当遇到请求激增或者黑客攻击的情况下&#xff0c;会导致接口占用大量的服务器资源&#xff0c;使得接口响应效率的降低或者超时&#xff0c;更或者导致服务器宕机。 限流是指对应用服务进行限制…

LINUX 下 NODE 安装与配置

一、官网地址&#xff1a; &#xff08;中文网&#xff09;https://nodejs.cn/ &#xff08;英文网&#xff09;https://nodejs.org/en/ 二、下载安装包 2.1、下载地址&#xff1a;下载 | Node.js 中文网 https://nodejs.cn/download/ 2.2、使用 wget 命令下载到linux 服务器…

Qt重写webrtc的demo peerconnection

整个demo为&#xff1a; 可以选择多个编码方式&#xff1a; cmake_minimum_required(VERSION 3.5)project(untitled LANGUAGES CXX) set(CMAKE_CXX_STANDARD 20) set(CMAKE_INCLUDE_CURRENT_DIR ON)set(CMAKE_AUTOUIC ON) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON)set(CMA…

el-tabs中tabs过多造成form表单输入的时候卡顿

这里写自定义目录标题 tabs过多造成的输入卡顿解决方案方案一方案二 出现的并发问题解决方案 tabs过多造成的输入卡顿 描述&#xff1a;前端要写一个需求&#xff0c;大概有一百多个tab渲染过来&#xff0c;每个tab中都是一个表单&#xff0c;这个时候数据渲染任务加重&#x…