Hadoop IO操作之SequenceFile 和 MapFile
一、SquenceFile
文件中每条记录是可序列化,可持久化的键值对,提供相应的读写器和排序器,写操作根据压缩的类型分为3种。
---Write 无压缩写数据
---RecordCompressWriter记录级压缩文件,只压缩值
---BlockCompressWrite块级压缩文件,键值采用独立压缩方式
在存储结构上,SequenceFile主要由一个Header后跟多条Record组成,如下图所示:
前三个字节是一个Bytes SEQ代表着版本号,同时header也包括key的名称,value class , 压缩细节,metadata,以及Sync markers。Sync markers的作用在于可以读取任意位置的数据。
在recourds中,又分为是否压缩格式。当没有被压缩时,key与value使用Serialization序列化写入SequenceFile。当选择压缩格式时,record的压缩格式与没有压缩其实不尽相同,除了value的bytes被压缩,key是不被压缩的。
当保存的记录很多时候,可以把一串记录组织到一起同一压缩成一块。
在Block中,它使所有的信息进行压缩,压缩的最小大小由配置文件中,io.seqfile.compress.blocksize配置项决定。
二、MapFile
MapFile是排序后的SequenceFile,通过观察其目录结构可以看到MapFile由两部分组成,分别是data和index。
index作为文件的数据索引,主要记录了每个Record的key值,以及该Record在文件中的偏移位置。在MapFile被访问的时候,索引文件会被加载到内存,通过索引映射关系可迅速定位到指定Record所在文件位置,因此,相对SequenceFile而言,MapFile的检索效率是高效的,缺点是会消耗一部分内存来存储index数据。
需注意的是,MapFile并不会把所有Record都记录到index中去,默认情况下每隔128条记录存储一个索引映射。当然,记录间隔可人为修改,通过MapFIle.Writer的setIndexInterval()方法,或修改io.map.index.interval属性;
另外,与SequenceFile不同的是,MapFile的KeyClass一定要实现WritableComparable接口,即Key值是可比较的。
缺点:
1.文件不支持复写操作,不能向已存在的SequenceFile(MapFile)追加存储记录
2.当write流不关闭的时候,没有办法构造read流。也就是在执行文件写操作的时候,该文件是不可读取的
SequenceFile文件是用来存储key-value数据的,但它并不保证这些存储的key-value是有序的,而MapFile文件则可以看做是存储有序key-value的SequenceFile文件。MapFile文件保证key-value的有序(基于key)是通过每一次写入key-value时的检查机制,这种检查机制其实很简单,就是保证当前正要写入的key-value与上一个刚写入的key-value符合设定的顺序,但是,这种有序是由用户来保证的,一旦写入的key-value不符合key的非递减顺序,则会直接报错而不是自动的去对输入的key-value排序。
SequenceFile转换为MapFile
mapFile既然是排序和索引后的SequenceFile那么自然可以把SequenceFile转换为MapFile使用mapFile.fix()方法把一个SequenceFile文件转换成MapFile。
转载于:https://www.cnblogs.com/1iHu4D0n9/p/8361403.html
Hadoop IO操作之SequenceFile 和 MapFile相关推荐
- Hadoop2.7.3 mapreduce(三)SequenceFile和MapFile 简介与应用
Hadoop的 hdfs 和 mapreduce 子框架主要是针对大数据文件设计的,在小文件的处理上不但效率低下,而且十分消耗磁盘空间(每一个小文件占用一个Block , hdfs默认block大小为 ...
- Hadoop入门(五)IO操作
一.HadoopIO操作意义 Hadoop自带一套用于I/O的原子性的操作 (不会被线程调度机制打断,一直到结束,中间不会有任何context switch) 特点 基于保障海量数据集的完整性和压缩性 ...
- HDFS之SequenceFile和MapFile
Hadoop的HDFS和MapReduce子框架主要是针对大数据文件来设计的,在小文件的处理上不但效率低下,而且十分消耗内存资源(每一个小文件占用一个Block,每一个block的元数据都存储在nam ...
- hadoop深入学习之SequenceFile
大数据学习篇:hadoop深入浅出系列之HDFS(七) --小文件解决方案 - 美丽的泡沫 - CSDN博客 - http://blog.csdn.net/stronglyh/article/deta ...
- Hadoop IO 特性详解(1)【数据完整性】
本文结合hadoop : the definitive guide精心而作,包含作者的心血,希望可以帮助大家理解一点hdfs的皮毛,足矣.(charles@xingbod.cn) hadoop本身自带 ...
- [零基础学JAVA]Java SE应用部分-27.Java IO操作(01)
JAVA IO操作目标 本季知识点 1.File类 2.RandomAccessFile类 File类 在JAVA中所有的IO操作全部存放在java.io包中. File是唯一一个与文件本身有关的操作 ...
- java中的IO操作总结(一)
转载:http://www.cnblogs.com/nerxious/archive/2012/12/15/2818848.html 所谓IO,也就是Input与Output的缩写.在java中 ...
- python和R文件IO操作对比及dataframe创建方式对比:read_csv、to_csv、write.csv、 data.frame、pd.DataFrame
python和R文件IO操作对比及dataframe创建方式对比 很多工程师可能刚开始的时候只熟悉python或者R其中的一个进行数据科学相关的任务. 那么如果我们对比这学习可以快速了解语言设计背后的 ...
- CPU被夺走的三种状态 执行时间久了 IO操作让cpu等待 被优先级高的抢占
CPU被夺走的三种状态 . cpu的三种状态之 运行态 就绪态等待被调用 阻塞态 i ...
最新文章
- centos6.5安装docker
- 【Go API 开发实战 7】基础 3:记录和管理 API 日志
- mysql闪回工具下载_MySQL闪回工具之myflash 和 binlog2sql
- IT餐馆—第二十五回 结对
- Scrapy_CSS选择器
- android 用LruCache读取大图片并缓存(转)
- Linux安装配置 VNC Server
- 最全Spring常用注解详解
- 基于STM32的四位TM1637完整程序
- C标准库源码解读(VC9.0版本)——ctype.h
- pubg服务器维护6.23,pubg维护6月23日 | 手游网游页游攻略大全
- YbSoftwareFactory 代码生成插件【十三】:Web API 的安全性
- 使用IE浏览器将pfx转为cer证书
- MySQL查询7天内过生日的用户 查询生日是今天的用户 解决跨年问题
- 大数据学习路线(包含全套视频教程)
- 计算机教室100字介绍,班级简介范文100字
- Java小游戏开发斗地主小游戏Java小游戏源码
- 21世纪世界国土面积排名
- 【34个PMP项目实战案例5】如何提高团队的配合度
- 普罗米修斯 软件_Prometheus普罗米修斯
热门文章
- 【动态规划】计蒜客:蒜头君闯关(最长递增子序列的变体)
- it男java_java-学习8
- Linux下MySQL起动报错The server quit without updating PID file
- 【编辑器】vscode修改背景图片的插件们
- UVa1225 - Digit Counting
- 8.22最短路径讲解
- 塑料模具计算机辅助设计,注塑模具3D计算机辅助设计系统
- 计算机网络-IP数据报计算(IP数据报分片)一个数据报部分长度为3400字节(使用固定首部)。现在经过一个网络传输,该网络的MTU为800字节:
- 2015蓝桥杯C++A:牌型种数(分配问题)
- OpenGL基础53:阴影映射(下)