大数据之IO操作

本文介绍了Hadoop中的SequenceFile和MapFile两种文件格式。SequenceFile用于存储大量键值对数据,支持多种压缩方式;MapFile是在SequenceFile基础上增加了索引功能,实现了键值对的快速查找。此外还简述了HDFS的主要API类。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、Sequencefile简介

    Sequencefile由一系列的二进制key/value组成,如果key为小文件名,value为文件内容,则可以将大批小文件合并成一个大文件。其存储结构如下图所示:



SequenceFile储存

文件中每条记录是可序列化,可持久化的键值对,提供相应的读写器和排序器,写操作根据压缩的类型分为3种

–Write无压缩写数据
–RecordCompressWriter记录级压缩文件,只压缩值
–BlockCompressWrite块级压缩文件,键值采用独立压缩方式
在储存结构上,sequenceFile主要由一个Header后跟多条Record组成。

SequenceFile操作

通过createWrite创建SequenceFile对象,返回Write实例,指定待写入的数据流如FSDataOutputStreamFileSystem对象和Path对象。还需指定Configuration对象和键值类型(都需要能序列化)

SequenceFile通过API来完成新记录的添加操作

fileWriter.append(key,value);


二、MapFile

MapFile可以通过SequenceFile的地址,进行分类查找的格式。使用这个格式的优点在于,首先会将SequenceFile中的地址都加载入内存,并且进行了key值排序,从而提供更快的数据查找

SequenceFile只生成一个文件不同,MapFile生成一个文件夹

索引模型按128个键建立的,可以通过io.map.index.interval修改

缺点

1.文件不支持复写操作,不能向已存在的SequenceFile(MapFile)追加存储记录
2.write流不关闭的时候,没有办法构造read流。也就是在执行文件写操作的时候,该文件是不可读取的


排序后的SequeneceFile,并且它会额外生成一个索引文件提供按键的查找.读写mapFile与读写SequenceFile

非常类似,只需要换成MapFile.ReaderMapFile.Writer就可以了。

在命令行显示mapFile的文件内容同样要用 -text


SequenceFile文件是用来存储key-value数据的,但它并不保证这些存储的key-value是有序的

MapFile文件则可以看做是存储有序key-valueSequenceFile文件

MapFile文件保证key-value的有序(基于key)是通过每一次写入key-value时的检查机制,这种检查机制其实很简单,就是保证当前正要写入的key-value与上一个刚写入的key-value符合设定的顺序

但是,这种有序是由用户来保证的,一旦写入的key-value不符合key的非递减顺序,则会直接报错而不是自动的去对输入的key-value排序


三、hdfs的主要API类

    FileSystem--hadoop的一个文件系统接口。
    FSDataInputStream--用FSDataInputStream来读取HDFS中的指定文件
    FSDataOutputStream--用FSDataInputStream来读取HDFS中的指定文件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值