没有合适的资源?快使用搜索试试~ 我知道了~
spark-SequenceFile及MapFile讲解
需积分: 0 1 下载量 201 浏览量
2023-04-08
09:39:03
上传
评论
收藏 209KB PDF 举报
温馨提示
试读
3页
spark-SequenceFile及MapFile讲解
资源推荐
资源详情
资源评论
浪尖 qq 技术交流群 459898801 224209501
浪尖 qq 技术交流群 459898801 224209501
Hadoop 的 HDFS 和 MapReduce 子框架主要是针对大数据文件来设计的,在小文件的处理上不但效率低下,而且十分
消耗内存资源(每一个小文件占用一个 Block,每一个 block 的元数据都存储在 namenode 的内存里)。解决办法通常是选
择一个容器,将这些小文件组织起来统一存储。HDFS 提供了两种类型的容器,分别是 SequenceFile 和 MapFile。
一、
SequenceFile
SequenceFile 的存储类似于 Log 文件,所不同的是 Log File 的每条记录的是纯文本数据,而 SequenceFile 的每条记录
是可序列化的字符数组。
SequenceFile 可通过如下 API 来完成新记录的添加操作:
fileWriter.append(key,value)
可以看到,每条记录以键值对的方式进行组织,但前提是 Key 和 Value 需具备序列化和反序列化的功能
Hadoop 预定义了一些 Key Class 和 Value Class,他们直接或间接实现了 Writable 接口,满足了该功能,包括:
Text 等同于 Java 中的 String
IntWritable 等同于 Java 中的 Int
BooleanWritable 等同于 Java 中的 Boolean
.
.
在存储结构上,SequenceFile 主要由一个 Header 后跟多条 Record 组成,如图所示:
Header 主要包含了 Key classname,Value classname,存储压缩算法,用户自定义元数据等信息,此外,还包含了一
些同步标识,用于快速定位到记录的边界。
每条 Record 以键值对的方式进行存储,用来表示它的字符数组可依次解析成:记录的长度、Key 的长度、Key 值和 Value
值,并且 Value 值的结构取决于该记录是否被压缩。
数据压缩有利于节省磁盘空间和加快网络传输,SeqeunceFile 支持两种格式的数据压缩,分别是:record compression
和 block compression。
record compression 如上图所示,是对每条记录的 value 进行压缩
block compression 是将一连串的 record 组织到一起,统一压缩成一个 block,如图所示:
block 信息主要存储了:块所包含的记录数、每条记录 Key 长度的集合、每条记录 Key 值的集合、每条记录 Value 长度
的集合和每条记录 Value 值的集合
注:每个 block 的大小是可通过 io.seqfile.compress.blocksize 属性来指定的
示例:SequenceFile 读/写 操作
[java] view plain copy
1. Configuration conf=new Configuration();
2. FileSystem fs=FileSystem.get(conf);
3. Path seqFile=new Path("seqFile.seq");
4. //Reader 内部类用于文件的读取操作
5. SequenceFile.Reader reader=new SequenceFile.Reader(fs,seqFile,conf);
6. //Writer 内部类用于文件的写操作,假设 Key 和 Value 都为 Text 类型
7. SequenceFile.Writer writer=new SequenceFile.Writer(fs,conf,seqFile,Text.class,Text.class);
8. //通过 writer 向文档中写入记录
9. writer.append(new Text("key"),new Text("value"));
资源评论
小萝卜算子
- 粉丝: 70
- 资源: 20
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功