一、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相关推荐

  1. Hadoop2.7.3 mapreduce(三)SequenceFile和MapFile 简介与应用

    Hadoop的 hdfs 和 mapreduce 子框架主要是针对大数据文件设计的,在小文件的处理上不但效率低下,而且十分消耗磁盘空间(每一个小文件占用一个Block , hdfs默认block大小为 ...

  2. Hadoop入门(五)IO操作

    一.HadoopIO操作意义 Hadoop自带一套用于I/O的原子性的操作 (不会被线程调度机制打断,一直到结束,中间不会有任何context switch) 特点 基于保障海量数据集的完整性和压缩性 ...

  3. HDFS之SequenceFile和MapFile

    Hadoop的HDFS和MapReduce子框架主要是针对大数据文件来设计的,在小文件的处理上不但效率低下,而且十分消耗内存资源(每一个小文件占用一个Block,每一个block的元数据都存储在nam ...

  4. hadoop深入学习之SequenceFile

    大数据学习篇:hadoop深入浅出系列之HDFS(七) --小文件解决方案 - 美丽的泡沫 - CSDN博客 - http://blog.csdn.net/stronglyh/article/deta ...

  5. Hadoop IO 特性详解(1)【数据完整性】

    本文结合hadoop : the definitive guide精心而作,包含作者的心血,希望可以帮助大家理解一点hdfs的皮毛,足矣.(charles@xingbod.cn) hadoop本身自带 ...

  6. [零基础学JAVA]Java SE应用部分-27.Java IO操作(01)

    JAVA IO操作目标 本季知识点 1.File类 2.RandomAccessFile类 File类 在JAVA中所有的IO操作全部存放在java.io包中. File是唯一一个与文件本身有关的操作 ...

  7. java中的IO操作总结(一)

    转载:http://www.cnblogs.com/nerxious/archive/2012/12/15/2818848.html    所谓IO,也就是Input与Output的缩写.在java中 ...

  8. python和R文件IO操作对比及dataframe创建方式对比:read_csv、to_csv、write.csv、 data.frame、pd.DataFrame

    python和R文件IO操作对比及dataframe创建方式对比 很多工程师可能刚开始的时候只熟悉python或者R其中的一个进行数据科学相关的任务. 那么如果我们对比这学习可以快速了解语言设计背后的 ...

  9. CPU被夺走的三种状态 执行时间久了 IO操作让cpu等待 被优先级高的抢占

    CPU被夺走的三种状态   .                           cpu的三种状态之              运行态      就绪态等待被调用             阻塞态 i ...

最新文章

  1. centos6.5安装docker
  2. 【Go API 开发实战 7】基础 3:记录和管理 API 日志
  3. mysql闪回工具下载_MySQL闪回工具之myflash 和 binlog2sql
  4. IT餐馆—第二十五回 结对
  5. Scrapy_CSS选择器
  6. android 用LruCache读取大图片并缓存(转)
  7. Linux安装配置 VNC Server
  8. 最全Spring常用注解详解
  9. 基于STM32的四位TM1637完整程序
  10. C标准库源码解读(VC9.0版本)——ctype.h
  11. pubg服务器维护6.23,pubg维护6月23日 | 手游网游页游攻略大全
  12. YbSoftwareFactory 代码生成插件【十三】:Web API 的安全性
  13. 使用IE浏览器将pfx转为cer证书
  14. MySQL查询7天内过生日的用户 查询生日是今天的用户 解决跨年问题
  15. 大数据学习路线(包含全套视频教程)
  16. 计算机教室100字介绍,班级简介范文100字
  17. Java小游戏开发斗地主小游戏Java小游戏源码
  18. 21世纪世界国土面积排名
  19. 【34个PMP项目实战案例5】如何提高团队的配合度
  20. 普罗米修斯 软件_Prometheus普罗米修斯

热门文章

  1. 【动态规划】计蒜客:蒜头君闯关(最长递增子序列的变体)
  2. it男java_java-学习8
  3. Linux下MySQL起动报错The server quit without updating PID file
  4. 【编辑器】vscode修改背景图片的插件们
  5. UVa1225 - Digit Counting
  6. 8.22最短路径讲解
  7. 塑料模具计算机辅助设计,注塑模具3D计算机辅助设计系统
  8. 计算机网络-IP数据报计算(IP数据报分片)一个数据报部分长度为3400字节(使用固定首部)。现在经过一个网络传输,该网络的MTU为800字节:
  9. 2015蓝桥杯C++A:牌型种数(分配问题)
  10. OpenGL基础53:阴影映射(下)