前言:
上文介绍了Hadoop的IO序列化,大家应该可以知道其实Hadoop很多的设计也是专门为了MapReduce编程框架服务的,除了序列化还有专门的文件类:SequenceFile和MapFile,其中,MapFile是经过排序并带有索引的SequenceFile,而SequenceFile也是我们数据仓库原来在云梯1上最通用的数据文件,下面我将详细介绍下这两个文件类:
一、SequenceFile:
SequenceFile 是一个由二进制序列化过的key/value的字节流组成的文本存储文件,它可以在map/reduce过程中的input/output 的format时被使用。在map/reduce过程中,map处理文件的临时输出就是使用SequenceFile处理过的。 SequenceFile分别提供了读、写、排序的操作类。
SequenceFile压缩:
(1)SequenceFile的内部格式取决于是否启用压缩,如果是,要么是记录压缩,要么是块压缩
(2)有以下三种类型:
a.无压缩类型:如果没有启用压缩(默认设置),那么每个记录就由他的记录长度(字节数)、键的长度、键和值组成。长度字段为四字节。
b.记录压缩类型:记录压缩格式与无压缩格式基本相同,不同的是值字节是用定义在头部的编码器来压缩的。注意,键是不压缩的。
c.块压缩类型:块压缩一次压缩多个记录,因此它比记录压缩更紧凑,而且一般优先选择。当记录的字节数达到最小大小,才会添加到块。改最小值由io.seqfile.compress.blocksize中的属性定义。默认值是1000000字节。格式为记录数、键长度、键、值长度、值。
SequenceFile文件格式的好处:
a.支持基于记录(Record)或块(Block)的数据压缩
b.支持splittable,能够作为MapReduce的输入分片
c.修改简单:主要负责修改相应的业务逻辑,而不用考虑具体的存储格式
SequenceFile文件格式的坏处:
坏处是需要一个合并文件的过程,且合并后的文件将不方便查看
二、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值是可比较的。
使用MapFile或SequenceFile虽然可以解决HDFS中小文件的存储问题,但也有一定局限性,如:
1.文件不支持复写操作,不能向已存在的SequenceFile(MapFile)追加存储记录
2.当write流不关闭的时候,没有办法构造read流。也就是在执行文件写操作的时候,该文件是不可读取的。
相关推荐
Spark-SequenceFile 及 MapFile 是 Hadoop 的两个重要组件,分别用于解决小文件处理效率低下的问题和提供高效的数据存储方式。下面将详细介绍这两个组件的概念、特点和应用。 一、SequenceFile SequenceFile 是一...
例如,可以通过`io.seqfile.compress.blocksize`来设置SequenceFile的压缩块大小,或者通过`io.mapfile.bloom.size`控制Bloom Filter的大小,以优化性能。此外,对于MapReduce作业,可以考虑是否在map阶段就进行压缩...
在Hadoop大数据处理环境中,SequenceFile和MapFile都是常见的数据存储格式。SequenceFile是一种二进制文件格式,常用于存储键值对数据,适合大规模数据的处理和传输。MapFile则是SequenceFile的一种优化形式,它增加...
在Hadoop生态系统中,SequenceFile和MapFile是两种常见的数据存储格式,它们为大数据处理提供了高效、可扩展的解决方案。这两个文件格式都是Hadoop原生支持的,用于存储大规模数据集,尤其适用于分布式环境。接下来...
- **文件基数据结构**:Hadoop 支持多种文件基数据结构,如 SequenceFile 和 MapFile,这些结构有助于更高效地访问和处理大数据集。 #### 5. 进阶MapReduce主题 - **排序和连接数据**:MapReduce 可以用来对大型...
在Hadoop生态系统中,为了高效地存储和处理数据,有多种文件格式被设计出来,如SequenceFile、MapFile、ORCFile和ParquetFile。这些文件格式各有特点,适合不同的场景需求。 1. **SequenceFile** SequenceFile是...
在Hadoop中,SequenceFile可以使用MapFile来排序和索引,这样可以提高SequenceFile的读取效率。MapFile是一种特殊的SequenceFile,用于对SequenceFile进行排序和索引。 在给定的程序中,我们可以看到 SequenceFile ...
1.1 SequenceFile概述 1.2 SequenceFile压缩 1.4 SequenceFile读取文件 1.5 SequenceFile总结
- **文件结构**:Hadoop还支持特定类型的文件结构,如SequenceFile和MapFile,这些文件结构有助于优化数据读取性能。 #### 四、开发Hadoop应用程序 - **Configuration API** - 提供了配置应用程序参数的方法,...
- 详细说明了SequenceFile和MapFile等基于文件的数据结构。 5. **开发MapReduce应用程序** - **配置** - 讲解了如何配置MapReduce应用程序的相关参数。 #### 三、总结 本书全面而深入地介绍了Hadoop的核心...
- **文件结构**: 除了传统的文件系统外,Hadoop还支持一些特殊的数据结构,如SequenceFile和MapFile,这些结构可以更高效地存储和检索数据。 #### 五、MapReduce应用程序开发 - **配置API**: MapReduce应用程序...
本书是Hadoop领域内的经典之作,被视为学习Hadoop的重要参考资料之一。该版本为第三版,相较于之前的版本进行了大量的更新与改进,以反映Hadoop技术的最新发展。 #### 书籍内容概览 1. **前言**:介绍了Hadoop的...
本书从Hadoop的缘起开始,由浅入深,结合理论和实践,全方位地介绍Hadoop这一高性能处理海量数据集的理想工具。全书共16章,3个附录,涉及的主题包括:Haddoop简介;MapReduce简介;Hadoop分布式文件系统;Hadoop...
Apache Hadoop和Hadoop生态圈 第2章 关于MapReduce 一个气象数据集 数据的格式 使用Unix工具进行数据分析 使用Hadoop分析数据 map阶段和reduce阶段 横向扩展 合并函数 运行一个分布式的MapReduce作业 Hadoop的...
基于Hadoop的MapReduce作业集合 项目简介 本项目是一个基于Hadoop的MapReduce作业集合,涵盖了... 读取和写入SequenceFile和MapFile。 5. 序列化 使用Hadoop的序列化机制进行数据序列化和反序列化。 6. 设计模式
第四章探讨了Hadoop I/O,即数据的输入输出处理,包括数据完整性的保障、各种本地文件系统和HDFS中数据完整性的实现、压缩技术及编解码器、MapReduce中压缩的使用、序列化和可写接口的使用,以及Avro、SequenceFile...
- **文件结构**:本书还介绍了一些特殊类型的文件结构,如SequenceFile和MapFile,它们适用于不同的场景。 #### 六、MapReduce应用程序开发 - **配置API**:提供了详细的指南来配置MapReduce作业,包括如何设置输入...
Hadoop I/O是Hadoop处理数据的核心,包括数据压缩、序列化框架、自定义Writable实现以及基于文件的数据结构如SequenceFile和MapFile。数据压缩可以减少存储空间和网络传输的数据量,提高Hadoop处理数据的效率。序列...