首页 > 其他分享 >HDFS操作01

HDFS操作01

时间:2024-12-26 14:46:24浏览次数:3  
标签:HDFS 01 文件 System fs Path println 操作 out

实验内容与完成情况:

(一)编程实现以下功能,并利用Hadoop提供的Shell命令完成相同任务:

 

(1) 向HDFS中上传任意文本文件,如果指定的文件在HDFS中已经存在,则由用户来指定是追加到原有文件末尾还是覆盖原有的文件;

 

(2) 从HDFS中下载指定文件,如果本地文件与要下载的文件名称相同,则自动对下载的文件重命名;

 

(3) 将HDFS中指定文件的内容输出到终端中;

 

(4) 显示HDFS中指定的文件的读写权限、大小、创建时间、路径等信息;

 

(5) 给定HDFS中某一个目录,输出该目录下的所有文件的读写权限、大小、创建时间、路径等信息,如果该文件是目录,则递归输出该目录下所有文件相关信息;

 

(6) 提供一个HDFS内的文件的路径,对该文件进行创建和删除操作。如果文件所在目录不存在,则自动创建目录;

 

(7) 提供一个HDFS的目录的路径,对该目录进行创建和删除操作。创建目录时,如果目录文件所在目录不存在,则自动创建相应目录;删除目录时,由用户指定当该目录不为空时是否还删除该目录;

 

(8) 向HDFS中指定的文件追加内容,由用户指定内容追加到原有文件的开头或结尾;

 

(9) 删除HDFS中指定的文件;

 

(10) 在HDFS中,将文件从源路径移动到目的路径。

 

1)先展示编程实现效果:

 

 

 

 

HDFSOperations.java:

package hdfs;

 

import org.apache.hadoop.fs.*;

 

import java.io.IOException;

 

public class HDFSOperations {

    // 上传文件到 HDFS

    public static void uploadFile(String localFilePath, String hdfsPath, boolean overwrite, boolean append) throws IOException {

        FileSystem fs = HDFSConfig.getFileSystem();

        Path srcPath = new Path(localFilePath);

        Path destPath = new Path(hdfsPath);

 

        System.out.println("正在上传文件,从: " + localFilePath + " 到 HDFS 路径: " + hdfsPath);

        if (fs.exists(destPath)) {

            if (overwrite) {

                System.out.println("文件已存在。正在覆盖...");

                fs.delete(destPath, true);

            } else if (append) {

                System.out.println("文件已存在。正在追加...");

                FSDataOutputStream out = fs.append(destPath);

                FSDataInputStream in = fs.open(srcPath);

                byte[] buffer = new byte[1024];

                int bytesRead;

                while ((bytesRead = in.read(buffer)) != -1) {

                    out.write(buffer, 0, bytesRead);

                }

                in.close();

                out.close();

                System.out.println("文件追加成功。");

                return;

            } else {

                System.out.println("文件已存在。没有做任何修改。");

                return;

            }

        }

 

        fs.copyFromLocalFile(srcPath, destPath);

        System.out.println("文件上传成功。");

        fs.close();

    }

 

    // 下载文件到本地

    public static void downloadFile(String hdfsFilePath, String localFilePath) throws IOException {

        FileSystem fs = HDFSConfig.getFileSystem();

        Path hdfsPath = new Path(hdfsFilePath);

        Path localPath = new Path(localFilePath);

 

        System.out.println("正在下载文件,从 HDFS 路径: " + hdfsFilePath + " 到本地路径: " + localFilePath);

        if (fs.exists(hdfsPath)) {

            if (fs.exists(localPath)) {

                localPath = new Path(localFilePath + "_new");

                System.out.println("本地文件已存在。正在将下载的文件重命名为: " + localPath);

            }

            fs.copyToLocalFile(hdfsPath, localPath);

            System.out.println("文件下载成功。");

        } else {

            System.out.println("HDFS 上未找到文件。");

        }

 

        fs.close();

    }

 

    // 输出文件内容到终端

    public static void viewFile(String hdfsFilePath) throws IOException {

        FileSystem fs = HDFSConfig.getFileSystem();

        Path filePath = new Path(hdfsFilePath);

 

        System.out.println("正在查看文件内容: " + hdfsFilePath);

        if (fs.exists(filePath)) {

            FSDataInputStream in = fs.open(filePath);

            byte[] buffer = new byte[1024];

            int bytesRead;

            while ((bytesRead = in.read(buffer)) != -1) {

                System.out.write(buffer, 0, bytesRead);

            }

            in.close();

            System.out.println("\n文件内容显示成功。");

        } else {

            System.out.println("HDFS 上未找到文件。");

        }

 

        fs.close();

    }

 

    // 显示文件信息

    public static void fileInfo(String hdfsFilePath) throws IOException {

        FileSystem fs = HDFSConfig.getFileSystem();

        Path filePath = new Path(hdfsFilePath);

 

        System.out.println("正在获取文件信息: " + hdfsFilePath);

        if (fs.exists(filePath)) {

            FileStatus status = fs.getFileStatus(filePath);

            System.out.println("路径: " + status.getPath());

            System.out.println("所有者: " + status.getOwner());

            System.out.println("权限: " + status.getPermission());

            System.out.println("大小: " + status.getLen());

            System.out.println("修改时间: " + status.getModificationTime());

        } else {

            System.out.println("HDFS 上未找到文件。");

        }

 

        fs.close();

    }

 

    // 递归显示目录下文件信息

    public static void dirInfo(String hdfsDirPath) throws IOException {

        FileSystem fs = HDFSConfig.getFileSystem();

        Path dirPath = new Path(hdfsDirPath);

 

        System.out.println("正在获取目录信息: " + hdfsDirPath);

        if (fs.exists(dirPath)) {

            RemoteIterator<LocatedFileStatus> files = fs.listFiles(dirPath, true);

            while (files.hasNext()) {

                LocatedFileStatus fileStatus = files.next();

                System.out.println("路径: " + fileStatus.getPath());

                System.out.println("所有者: " + fileStatus.getOwner());

                System.out.println("权限: " + fileStatus.getPermission());

                System.out.println("大小: " + fileStatus.getLen());

                System.out.println("修改时间: " + fileStatus.getModificationTime());

                System.out.println("-------------------------------------------");

            }

        } else {

            System.out.println("HDFS 上未找到目录。");

        }

 

        fs.close();

    }

 

    // 创建文件

    public static void createFile(String hdfsFilePath) throws IOException {

        FileSystem fs = HDFSConfig.getFileSystem();

        Path filePath = new Path(hdfsFilePath);

 

        System.out.println("正在创建文件: " + hdfsFilePath);

        if (!fs.exists(filePath)) {

            FSDataOutputStream out = fs.create(filePath);

            out.close();

            System.out.println("文件创建成功。");

        } else {

            System.out.println("文件已存在。");

        }

 

        fs.close();

    }

 

    // 删除文件或目录

    public static void deletePath(String hdfsPath, boolean recursive) throws IOException {

        FileSystem fs = HDFSConfig.getFileSystem();

        Path path = new Path(hdfsPath);

 

        System.out.println("正在删除路径: " + hdfsPath);

        if (fs.exists(path)) {

            fs.delete(path, recursive);

            System.out.println("路径删除成功。");

        } else {

            System.out.println("HDFS 上未找到路径。");

        }

 

        fs.close();

    }

 

    // 追加内容到文件

    public static void appendToFile(String hdfsFilePath, String content) throws IOException {

        FileSystem fs = HDFSConfig.getFileSystem();

        Path filePath = new Path(hdfsFilePath);

 

        System.out.println("正在向文件追加内容: " + hdfsFilePath);

        if (fs.exists(filePath)) {

            FSDataOutputStream out = fs.append(filePath);

            out.write(content.getBytes());

            out.close();

            System.out.println("内容追加成功。");

        } else {

            System.out.println("HDFS 上未找到文件。");

        }

 

        fs.close();

    }

 

    // 移动文件

    public static void moveFile(String srcHdfsPath, String destHdfsPath) throws IOException {

        FileSystem fs = HDFSConfig.getFileSystem();

        Path srcPath = new Path(srcHdfsPath);

        Path destPath = new Path(destHdfsPath);

 

        System.out.println("正在移动文件,从: " + srcHdfsPath + " 到: " + destHdfsPath);

        if (fs.exists(srcPath)) {

            fs.rename(srcPath, destPath);

            System.out.println("文件移动成功。");

        } else {

            System.out.println("HDFS 上未找到源文件。");

        }

 

        fs.close();

    }

 

    public static void main(String[] args) {

        try {

            // 1. 上传文件

            HDFSOperations.uploadFile("src/main/java/hdfs/test.txt", "/user/hadoop/testFile.txt", true, false);

 

            // 2. 下载文件

            HDFSOperations.downloadFile("/user/hadoop/testFile.txt", "localFile.txt");

 

            // 3. 查看文件内容

            HDFSOperations.viewFile("/user/hadoop/testFile.txt");

 

            // 4. 查看文件信息

            HDFSOperations.fileInfo("/user/hadoop/testFile.txt");

 

            // 5. 查看目录信息

            HDFSOperations.dirInfo("/user/hadoop");

 

            // 6. 创建文件

            HDFSOperations.createFile("/user/hadoop/newFile");

 

            // 7. 删除文件

            HDFSOperations.deletePath("/user/hadoop/newFile", false);

 

            // 8. 追加内容

            HDFSOperations.appendToFile("/user/hadoop/testFile.txt", "这是追加的内容。");

 

            // 9. 移动文件

            HDFSOperations.moveFile("/user/hadoop/testFile.txt", "/user/hadoop/movedTestFile.txt");

 

        } catch (IOException e) {

            e.printStackTrace();

        }

    }

}

 

 

标签:HDFS,01,文件,System,fs,Path,println,操作,out
From: https://www.cnblogs.com/aixin52129211/p/18632762

相关文章

  • HDFS操作02(遇到的问题和解决)
    编程实现一个类“MyFSDataInputStream”,该类继承“org.apache.hadoop.fs.FSDataInputStream”,要求如下:实现按行读取HDFS中指定文件的方法“readLine()”,如果读到文件末尾,则返回空,否则返回文件一行的文本。 查看Java帮助手册或其它资料,用“java.net.URL”和“org.apache.hadoop.......
  • 熟悉常用的Linux操作和Hadoop操作(实验过程存在的问题和解决)
    实验步骤1)cd命令:切换目录(1) 切换到目录“/usr/local”(2) 切换到当前目录的上一级目录(3) 切换到当前登录Linux系统的用户的自己的主文件夹2)ls命令:查看文件与目录查看目录“/usr”下的所有文件和目录3)mkdir命令:新建目录(1)进入“/tmp”目录,创建一个名为“a”的目录,并查看“/tm......
  • 光伏逆变器如何正确使用和操作?
    光伏逆变器是太阳能发电系统中的关键设备,它将太阳能电池板产生的直流电转换为交流电,以供家庭或工业使用。正确使用和操作光伏逆变器可以确保系统高效、安全地运行。以下是一些基本的指导原则:阅读用户手册:在安装和使用光伏逆变器之前,务必仔细阅读制造商提供的用户手册。这将帮助......
  • 鑫谷GPE-01超导热石墨烯导热垫片评测:255W下比利民TF9低4度
    一、前言:可重复使用的高性能导热垫对于DIY玩家而言,涂硅脂是装机过程中必不可少的工作,但其实涂硅脂也是一个技术活!比如涂的太薄或者有遗漏的地方,就会导致散热器底座与CPU顶盖无法充分接触,导致某几个核心的温度特别高。涂的太厚更不可取!因为市面上大部分高端硅脂的导热效率都在10......
  • DataFrame的基本操作
    在Python中,使用pandas库操作DataFrame是非常常见的,pandas提供了丰富的函数和方法来处理表格数据。下面是一些常见的DataFrame操作示例:1.创建DataFrameimportpandasaspd#从字典创建DataFramedata={'Name':['Alice','Bob','Charlie','David'],�......
  • 在 .NET C# 中的邮件合并过程中操作表格单元格
    TXTextControl中的邮件合并类是一个强大的库,旨在通过将数据合并到模板中来自动创建文档。它充当结构化数据(例如来自数据库、JSON或XML)和动态文档生成之间的桥梁,对于需要自动化文档工作流程的应用程序来说非常有用。从本质上讲,MailMerge类简化了创建专业、数据驱动文档......
  • Sigrity System SI SerialLink模式对串行链路进行串扰仿真分析操作指导-S参数模型
    SigritySystemSISerialLink模式对串行链路进行串扰仿真分析操作指导-S参数模型SigritySystemSISerialLink模式可以对串行链路进行串扰仿真分析,通过通道串扰仿真得到串扰频域波形,2D时域波形,2D眼图,3D眼图,误码率结果以及仿真报告下面以一个S参数模型的串扰通道模板进行说......
  • Sigrity System SI SerialLink模式对串行链路进行串扰仿真分析操作指导-传输线模型
    SigritySystemSISerialLink模式对串行链路进行串扰仿真分析操作指导-传输线模型SigritySystemSISerialLink模式可以对串行链路进行串扰仿真分析,通过通道串扰仿真得到串扰频域波形,2D时域波形,2D眼图,3D眼图,误码率结果以及仿真报告下面以一个传输线模型的串扰通道模板进行......
  • 365编程自学笔记--001
    day001我打算用365天,也就是一年的时间。从零开始学习编程和AI应用,目标是在明年的圣诞节之前,能够基本掌握全栈的web和移动端的开发,以及AI相关的应用与开发。以使得自己能够跟上这个飞速发展的AI时代,成为AI时代的首批移民。经过一段时间的调研和比选,最终觉得从coderwhy王红......
  • 01现代计算机视觉入门之:什么是图片
    ##系列文章目录##01现代计算机视觉入门之:什么是图片(6700字/25图)02现代计算机视觉入门之:什么是视频03现代计算机视觉入门之:什么是图片特征编码04现代计算机视觉入门之:什么是图片分类05现代计算机视觉入门之:什么是目标检测06现代计算机视觉入门之:什么是图像分割07现代计算......