HDFS Java API
HDFS(Hadoop Distributed File System)是Hadoop项目的核心子项目,在大数据开发中通过分布式计算对海量数据进行存储与管理。它基于流数据模式访问和处理超大文件的需求而开发
FileSystem是HDFS Java API的核心工具类,该类是一个抽象类,其中封装了很多操作文件的方法,使用这些方法可以很轻松地操作HDFS中的文件。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 | package com.xc.xcspringboot.test; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FSDataOutputStream; import org.apache.hadoop.fs.FileStatus; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.IOUtils; import org.apache.hadoop.util.Progressable; import java.io.BufferedInputStream; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.sql.Timestamp; public class HdfsApiTest { private static FileSystem hdfs; static { Configuration conf = new Configuration(); //设置HDFS访问地址 conf.set( "fs.default.name" , "hdfs://172.19.25.168:9000" ); try { //取得FileSystem文件系统实例 hdfs = FileSystem.get(conf); } catch (IOException e) { e.printStackTrace(); } } public static void main(String[] args) throws Exception { // mkdirs(hdfs); // createFile(hdfs); // createFileProgressable(hdfs); // getFile(hdfs); // deleteFile(hdfs); // listStatus(hdfs); // getFileStatus(hdfs); // copyFromLocalFile(hdfs); copyToLocalFile(hdfs); } /** * 创建目录 */ public static void mkdirs(FileSystem hdfs) throws IOException { boolean isok = hdfs.mkdirs( new Path( "hdfs:/mydir" )); if (isok) { System.out.println( "创建目录成功!" ); } else { System.out.println( "创建目录失败! " ); } } /** * 创建文件 */ public static void createFile(FileSystem hdfs) throws Exception { //打开一个输出流 FSDataOutputStream outputStream = hdfs.create( new Path( "hdfs:/mydir/newfile2.txt" )); //写入文件内容 outputStream.write( "我是文件内容" .getBytes()); System.out.println( "文件创建成功! " ); } /** * 查询HDFS文件内容并输出 */ public static void getFile(FileSystem hdfs) throws IOException { //打开文件输入流 InputStream in = hdfs.open( new Path( "hdfs:/mydir/newfile2.txt" )); //输出文件内容 IOUtils.copyBytes(in, System.out, 4096 , false ); } /** * 上传文件并监控上传进度 */ public static void createFileProgressable(FileSystem hdfs) throws IOException { InputStream in = new BufferedInputStream( new FileInputStream( "D:/导入导出/Java大全(2021年).pdf" )); //上传文件并监控上传进度 FSDataOutputStream outputStream = hdfs.create( new Path( "hdfs:/mydir/Java大全(2021年).pdf" ), new Progressable() { @Override public void progress() { //回调 方法显示进度 System.out.println( "." ); } }); IOUtils.copyBytes(in, outputStream, 4096 , false ); } /** * 删除文件 */ public static void deleteFile(FileSystem hdfs) throws Exception { Path path = new Path( "hdfs:/mydir/newfile2.txt" ); //删除文件 boolean isok = hdfs.deleteOnExit(path); if (isok) { System.out.println( "删除成功!" ); } else { System.out.println( "删除失败! " ); } } /** * 递归遍历目录和文件 */ public static void listStatus(FileSystem hdfs) throws IOException { //遍历HDFS上的文件和目录 FileStatus[] fs = hdfs.listStatus( new Path( "hdfs:/" )); if (fs.length > 0 ) { for (FileStatus f : fs) { showDir(f); } } } private static void showDir(FileStatus fs) throws IOException { Path path = fs.getPath(); //输出文件或目录的路径 System.out.println(path); //如果是目录,则递归遍历该目录下的所有子目录或文件 if (fs.isDirectory()) { FileStatus[] f = hdfs.listStatus(path); if (f.length > 0 ) { for (FileStatus file : f) { showDir(file); } } } } /** * 获取文件或目录的元数据 */ public static void getFileStatus(FileSystem hdfs) throws IOException { Path path = new Path( "hdfs:/mydir/newfile2.txt" ); FileStatus fileStatus = hdfs.getFileStatus(path); //判断是文件夹还是文件 if (fileStatus.isDirectory()) { System.out.println( "这是一个文件夹" ); } else { System.out.println( "这是一个文件" ); //输出元数据信息 System.out.println( "文件路径: " + fileStatus.getPath()); System.out.println( "文件修改日期: " + new Timestamp(fileStatus.getModificationTime()).toString()); System.out.println( "文件上次访问日期: " + new Timestamp(fileStatus.getAccessTime()).toString()); System.out.println( "文件长度: " + fileStatus.getLen()); System.out.println( "文件备份数: " + fileStatus.getReplication()); System.out.println( "文件块大小: " + fileStatus.getBlockSize()); System.out.println( "文件所有者:" + fileStatus.getOwner()); System.out.println( "文件所在分组: " + fileStatus.getGroup()); System.out.println( "文件的权限: " + fileStatus.getPermission().toString()); } } /** * 上传本地文件 */ public static void copyFromLocalFile(FileSystem hdfs) throws IOException { //创建可供hadoop使用的文件系统路径 Path src = new Path( "D:/xc-desktop/日志1.txt" ); //本地目录/文件 Path dst = new Path( "hdfs:/mydir/日志1.txt" ); //HDFS目录/文件 //复制上传本地文件至HDFS文件系统中 hdfs.copyFromLocalFile(src, dst); System.out.println( "文件上传成功!" ); } /** * 下载文件到本地 */ public static void copyToLocalFile(FileSystem hdfs) throws IOException { //创建可供hadoop使用的文件系统路径 Path src = new Path( "hdfs:/mydir/日志1.txt" ); //HDFS目录/文件 Path dst = new Path( "D:/xc-desktop/日志1.txt" ); //本地目录/文件 //4.从HDFS文件系统中复制下载文件至本地 hdfs.copyToLocalFile( false , src, dst, true ); System.out.println( "文件下载成功!" ); } } |
书籍:Hadoop大数据技术开发实战 4.4 HDFS Java API操作
https://gitee.com/caoyeoo0/xc-springboot/blob/hadoopApi/src/main/java/com/xc/xcspringboot/test/HdfsApiTest.java
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!