Hadoop - HDFS API 对文件进行操作
发布日期:2021-06-30 19:50:32
浏览次数:2
分类:技术文章
本文共 3994 字,大约阅读时间需要 13 分钟。
问题导读:
1. 文件从HDFS读取到本地
2. 文件从本地写入到HDFS
3. 常用操作(增删改查)
注:
解决方案:
文件读取
package p01;/* * API 操作 HDFS 文件实例: * 读取(下载) */import java.io.FileOutputStream;import java.io.IOException;import org.apache.commons.io.IOUtils;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.fs.FSDataInputStream;import org.apache.hadoop.fs.FileSystem;import org.apache.hadoop.fs.Path;class ReadFile { public static void main(String[] args) throws IOException { /* * 1. 得到Configuration对象 * Configuration 对象封装了客户端或服务器端的而配置,采用路径读取配置文件设置,一般为:conf/core-site.xml,hdfs-site.xml * 该对象一般为FileSystem 类的get()方法提供配置信息对象 */ // new 的配置文件 优先级低于 set Configuration conf = new Configuration(); /* * 2. 得到FileSystem对象 * FileSystem类 * 它是一个抽象类,提供了许多个基于此类的应用于不同场合的具体实现,例如:LocalFileSystem、DistributedSystem …… * 我们可以使用FileSystem的get() 方法得到 */ FileSystem fs = FileSystem.get(conf); // 3. 对文件进行操作 String filename = "file.txt"; String hdfsSrc = "hdfs://master:9000/" + filename; Path downloadSrc = new Path(hdfsSrc); /* * 3.1 输入流 * FSDataInputStream HDFS 的文件输入流 */ FSDataInputStream input = fs.open(downloadSrc); // 3.2 输出流(本地) String file = "/home/hadoop/download/file.txt"; FileOutputStream output = new FileOutputStream(file); // 3.3 写 IOUtils.copy(input, output); }}
文件写入
package p01;import java.io.FileInputStream;import java.io.IOException;import org.apache.commons.io.IOUtils;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.fs.FSDataOutputStream;import org.apache.hadoop.fs.FileSystem;import org.apache.hadoop.fs.Path;public class WriteFile { public static void main(String[] args) throws IOException { Configuration conf = new Configuration(); conf.set("fs.defaultFS", "hdfs://192.168.1.110:9000/"); FileSystem fs = FileSystem.get(conf); // 本地输入流 FileInputStream input = new FileInputStream("e:/a.txt"); // 创建输出流 Path path = new Path("hdfs://192.168.1.110:9000/file.txt"); FSDataOutputStream output = fs.create(path); // copy IOUtils.copy(input, output); }}
HDFSUtil
package p02;import java.net.URI;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.fs.FileSystem;import org.apache.hadoop.fs.LocatedFileStatus;import org.apache.hadoop.fs.Path;import org.apache.hadoop.fs.RemoteIterator;import org.junit.Before;import org.junit.Test;public class HDFSUtil { FileSystem fs = null; @Before public void init() throws Exception { Configuration conf = new Configuration(); conf.set("fs.defaultFS", "hdfs://192.168.1.110:9000/"); // 以用户名hadoop 访问URI,配置文件是conf fs = FileSystem.get(new URI("hdfs://192.168.1.110:9000/"), conf, "hadoop"); } // 文件上传 @Test public void upload() throws Exception { fs.copyFromLocalFile(new Path("e:/56e79ea2e1418.jpg"), new Path("hdfs://192.168.1.110:9000/56e79ea2e1418.jpg")); } // 文件下载 @Test public void download() throws Exception { /* * Parameters: delSrc - whether to delete the src src - path dst - path useRawLocalFileSystem - whether to use RawLocalFileSystem as local file system or not. */ fs.copyToLocalFile(false, new Path("hdfs://192.168.1.110:9000/file.txt"), new Path("e:/file2.txt"), true); } // 创建文件夹 @Test public void mkdirs() throws Exception { fs.mkdirs(new Path("/f1/f2/f3")); } // 删除文件或文件夹 @Test public void rm() throws Exception { /* * Parameters: f - the path to delete. recursive - if path is a directory and set to true, the directory is deleted else throws an exception. In case of a file the recursive can be set to either true or false. */ fs.delete(new Path("/f1"),true); } // 文件列表 @Test public void listFiles() throws Exception { /* * f - is the path recursive - if the subdirectories need to be traversed recursively */ // listFiles 文件信息,递归遍历 // listStatus 文件、文件夹信息,不提供递归遍历(自行查阅) RemoteIteratorfiles = fs.listFiles(new Path("/"), true); while(files.hasNext()) { LocatedFileStatus file = files.next(); Path filePath = file.getPath(); String filename = filePath.getName(); System.out.println(filename); } }}
转载地址:https://lipenglin.blog.csdn.net/article/details/53034391 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
路过,博主的博客真漂亮。。
[***.116.15.85]2024年04月30日 23时43分28秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Java Lambda表达式的应用--Stream API操作集合框架
2019-04-30
省市区三级联动插件Distpicker--前端实现地区三级联动
2019-04-30
solr的使用详解
2019-04-30
JS操作日期的工具类(获取本周、本月、本季度、本年、时间戳格式化方法)
2019-04-30
Java获取resources资源文件夹下的文件和文件流(Maven项目)
2019-04-30
Myslq连接(JDBC)url属性的参数的设置
2019-04-30
SpringMVC日期、数字格式数据绑定(Date日期格式绑定、数字格式绑定)
2019-04-30
Mybatis PageHelper(MyBatis 分页插件 )的使用
2019-04-30
Mybatis缓存的使用(Mybatis一级、二级缓存)
2019-04-30
Mybatis从头到尾(一)--MyBatis简介及项目搭建
2019-04-30
Java动态代理的彻底理解(Java高级特性-动态代理)
2019-04-30
Java Web路径获取方法
2019-04-30
数据库字段是逗号分隔的查询(FIND_IN_SET(str,strlist)方法的使用)
2019-04-30
Mybatis Plus的使用(Mybatis增强工具)- Mybatis从学习到忘记
2019-04-30
IDEA实用快捷键汇总及使用技巧【持续更新】
2019-04-30
Mybatis Plus使用技巧和实践(Mybatis-plus官方文档的补充)
2019-04-30