博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDFS的I/O流操作
阅读量:3935 次
发布时间:2019-05-23

本文共 2676 字,大约阅读时间需要 8 分钟。

1 HDFS文件上传

1.需求:把本地e盘上的banhua.txt文件上传到HDFS根目录

2.编写代码

@Testpublic void putFileToHDFS() throws IOException, InterruptedException, URISyntaxException {	// 1 获取文件系统	Configuration configuration = new Configuration();	FileSystem fs = FileSystem.get(new URI("hdfs://hadoop102:9000"), configuration, "atguigu");	// 2 创建输入流	FileInputStream fis = new FileInputStream(new File("e:/banhua.txt"));	// 3 获取输出流	FSDataOutputStream fos = fs.create(new Path("/banhua.txt"));	// 4 流对拷	IOUtils.copyBytes(fis, fos, configuration);	// 5 关闭资源	IOUtils.closeStream(fos);	IOUtils.closeStream(fis);    fs.close();}

开启一个流需要FileSystem对象 

2 HDFS文件下载

1.需求:从HDFS上下载banhua.txt文件到本地e盘上

2.编写代码

// 文件下载@Testpublic void getFileFromHDFS() throws IOException, InterruptedException, URISyntaxException{	// 1 获取文件系统	Configuration configuration = new Configuration();	FileSystem fs = FileSystem.get(new URI("hdfs://hadoop102:9000"), configuration, "atguigu");			// 2 获取输入流	FSDataInputStream fis = fs.open(new Path("/banhua.txt"));			// 3 获取输出流	FileOutputStream fos = new FileOutputStream(new File("e:/banhua.txt"));			// 4 流的对拷	IOUtils.copyBytes(fis, fos, configuration);			// 5 关闭资源	IOUtils.closeStream(fos);	IOUtils.closeStream(fis);	fs.close();}

3 定位文件读取

1.需求:分块读取HDFS上的大文件,比如根目录下的/hadoop-2.7.2.tar.gz

2.编写代码

(1)下载第一块

@Testpublic void readFileSeek1() throws IOException, InterruptedException, URISyntaxException{	// 1 获取文件系统	Configuration configuration = new Configuration();	FileSystem fs = FileSystem.get(new URI("hdfs://hadoop102:9000"), configuration, "atguigu");			// 2 获取输入流	FSDataInputStream fis = fs.open(new Path("/hadoop-2.7.2.tar.gz"));			// 3 创建输出流	FileOutputStream fos = new FileOutputStream(new File("e:/hadoop-2.7.2.tar.gz.part1"));			// 4 流的拷贝	byte[] buf = new byte[1024];			for(int i =0 ; i < 1024 * 128; i++){		fis.read(buf);		fos.write(buf);	}			// 5关闭资源	IOUtils.closeStream(fis);	IOUtils.closeStream(fos);fs.close();}

(2)下载第二块

@Testpublic void readFileSeek2() throws IOException, InterruptedException, URISyntaxException{	// 1 获取文件系统	Configuration configuration = new Configuration();	FileSystem fs = FileSystem.get(new URI("hdfs://hadoop102:9000"), configuration, "atguigu");			// 2 打开输入流	FSDataInputStream fis = fs.open(new Path("/hadoop-2.7.2.tar.gz"));			// 3 定位输入数据位置	fis.seek(1024*1024*128);			// 4 创建输出流	FileOutputStream fos = new FileOutputStream(new File("e:/hadoop-2.7.2.tar.gz.part2"));			// 5 流的对拷	IOUtils.copyBytes(fis, fos, configuration);			// 6 关闭资源	IOUtils.closeStream(fis);	IOUtils.closeStream(fos);}

(3)合并文件

在Window命令窗口中进入到目录E:\,然后执行如下命令,对数据进行合并

type hadoop-2.7.2.tar.gz.part2 >> hadoop-2.7.2.tar.gz.part1

合并完成后,将hadoop-2.7.2.tar.gz.part1重新命名为hadoop-2.7.2.tar.gz。解压发现该tar包非常完整。

 

 

转载地址:http://cbuwi.baihongyu.com/

你可能感兴趣的文章
线程基础:多任务处理(15)——Fork/Join框架(要点2)
查看>>
线程基础:多任务处理(16)——Fork/Join框架(排序算法性能补充)
查看>>
线程基础:多任务处理(14)——Fork/Join框架(要点1)
查看>>
架构设计:系统存储(13)——MySQL横向拆分与业务透明化(1)
查看>>
架构设计:系统存储(14)——MySQL横向拆分与业务透明化(2)
查看>>
架构设计:系统存储(5)——MySQL数据库性能优化(1)
查看>>
架构设计:系统存储(2)——块存储方案(2)
查看>>
架构设计:系统间通信(45)——阶段性问题记录
查看>>
架构设计:系统间通信(44)——自己动手设计ESB(5)
查看>>
架构设计:系统存储(1)——块存储方案(1)
查看>>
架构设计:系统间通信(42)——自己动手设计ESB(3)
查看>>
在工作时走神的闪光
查看>>
Ajax使用注意事项
查看>>
使用FileChannel下载本地文件及扩展
查看>>
linux文件权限与目录配置问题与解答(整理篇)
查看>>
linux文件与目录管理问题与回答(整理篇)
查看>>
java 数组笔记整理
查看>>
java IO/NIO 下载上传的笔记
查看>>
对行为的描述---一般系统论读书笔记
查看>>
贪心算法
查看>>