使用Java API操作HDFS

目录

简介

上传文件

下载文件

查看文件


简介

HDFS(Hadoop Distributed File System)是Apache Hadoop框架中的一个分布式文件系统。它被设计用于存储和处理大规模数据集,并能够在具有大量节点的集群上高效地进行数据访问和处理。

上传文件

// 导入 Hadoop 配置类
import org.apache.hadoop.conf.Configuration;
// 导入 Hadoop 文件系统类
import org.apache.hadoop.fs.FileSystem;
// 导入 Hadoop 路径类
import org.apache.hadoop.fs.Path;


// 导入 Java 标准库中的 IOException 类
import java.io.IOException;

public class UploadHdfsFile {
    public static void main(String[] args) {
         // 创建 Hadoop 配置对象
        Configuration conf = new Configuration();
        // 设置 Hadoop 默认文件系统为HDFS,指定主机和端口号
        conf.set("fs.defaultFS", "hdfs://master:9000");

        // 定义本地文件路径
        String localFilePath = "/home/hadoop/WorkSpace/hdfs/data/poetry.txt";
        // 定义 HDFS 文件路径
        String hdfsFilePath = "/data/";

        try (FileSystem fs = FileSystem.get(conf)) {
            // 创建本地路径对象
            Path localPath = new Path(localFilePath);
            // 创建 HDFS 路径对象
            Path hdfsPath = new Path(hdfsFilePath);

            // 使用 Hadoop 文件系统对象将本地文件复制到 HDFS
            fs.copyFromLocalFile(false, localPath, hdfsPath);
            // 打印上传成功消息
            System.out.println("文件上传成功!");
        } catch (IOException e) {
            // 打印上传失败消息及异常信息
            System.err.println("文件上传失败:" + e.getMessage());
        }
    }
}

下载文件

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

import java.io.IOException;

public class DownloadHdfsFile {
    public static void main(String[] args) {
        // 创建 Hadoop 配置对象
        Configuration conf = new Configuration();
        // 设置 Hadoop 默认文件系统为 HDFS,指定主机和端口号
        conf.set("fs.defaultFS", "hdfs://master:9000");

        // 定义 HDFS 文件路径
        String hdfsFilePath = "/data/poetry.txt";
        // 定义本地文件路径
        String localFilePath = "/home/hadoop/桌面/";

        try (FileSystem fs = FileSystem.get(conf)) {
            // 创建 HDFS 路径对象
            Path hdfsPath = new Path(hdfsFilePath);
            // 创建本地路径对象
            Path localPath = new Path(localFilePath);

            // 使用 Hadoop 文件系统对象将 HDFS 文件复制到本地
            fs.copyToLocalFile(false, hdfsPath, localPath);
            // 打印下载成功消息
            System.out.println("文件下载成功!");
        } catch (IOException e) {
            // 打印下载失败消息及异常信息
            System.err.println("文件下载失败:" + e.getMessage());
        }
    }
}

查看文件

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
// 导入 Hadoop 文件系统数据输入流类
import org.apache.hadoop.fs.FSDataInputStream;

import java.io.IOException;

public class ReadHdfsFile {
    public static void main(String[] args) {
        // 创建 Hadoop 配置对象
        Configuration conf = new Configuration();
        // 设置 Hadoop 默认文件系统为 HDFS,指定主机和端口号
        conf.set("fs.defaultFS", "hdfs://master:9000");

        // 定义 HDFS 文件路径
        String hdfsFilePath = "/data/poetry.txt";

        try (FileSystem fs = FileSystem.get(conf)) {
            // 创建 HDFS 路径对象
            Path hdfsPath = new Path(hdfsFilePath);

            if (!fs.exists(hdfsPath)) {
                // 如果文件不存在,打印错误消息并返回
                System.err.println("文件不存在:" + hdfsFilePath);
                return;
            }

            // 打开 HDFS 文件输入流
            FSDataInputStream inputStream = fs.open(hdfsPath);
            byte[] buffer = new byte[4096];
            int bytesRead = -1;

            // 读取文件内容并输出到控制台
            while ((bytesRead = inputStream.read(buffer)) > 0) {
                System.out.write(buffer, 0, bytesRead);
            }

            // 关闭输入流
            inputStream.close();
        } catch (IOException e) {
            // 打印读取文件失败消息及异常信息
            System.err.println("读取文件失败:" + e.getMessage());
        }
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值