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 文件、文件夹信息,不提供递归遍历(自行查阅)		RemoteIterator
files = 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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:MAC - HBase(伪分布式)
下一篇:python - MySQLdb

发表评论

最新留言

路过,博主的博客真漂亮。。
[***.116.15.85]2024年04月30日 23时43分28秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

Java Lambda表达式的应用--Stream API操作集合框架 2019-04-30
Java 8新特性之-- Date-Time API(LocalDate/Time/DateTime 日期时间API) 2019-04-30
省市区三级联动插件Distpicker--前端实现地区三级联动 2019-04-30
solr的使用详解 2019-04-30
JS操作日期的工具类(获取本周、本月、本季度、本年、时间戳格式化方法) 2019-04-30
jquery异步提交对象、数组(基本类型和对象类型)、集合数据(springMVC数据绑定参数) 2019-04-30
Java获取resources资源文件夹下的文件和文件流(Maven项目) 2019-04-30
Myslq连接(JDBC)url属性的参数的设置 2019-04-30
Activiti Rest集成Spring/SpringMVC环境(activiti rest API环境配置)(附源码) 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
Spring AOP的全面理解(学习Spring怎么也躲不掉的AOP)--Spring面向切面编程 2019-04-30
IDEA实用快捷键汇总及使用技巧【持续更新】 2019-04-30
Mybatis Plus使用技巧和实践(Mybatis-plus官方文档的补充) 2019-04-30