hive文件存储格式:SequenceFile系统总结

问题导读

1.什么是SequenceFile?
2.如何 通过 源
码实现SequenceFile压缩?
3.SequenceFile格式压缩有什么优点和缺点?




1.SequenceFile是什么

1.1 SequenceFile概述

1.1.sequenceFile文件是Hadoop用来存储二进制形式的<Key,Value>对而设计的一种平面文件(Flat File)。

1.2.可以把SequenceFile当做是一个容器,把所有的文件打包到SequenceFile类中可以高效的对小文件进行存储和处理。

1.3.SequenceFile文件并不按照其存储的Key进行排序存储,SequenceFile的内部类Writer提供了append功能。

1.4.SequenceFile中的Key和Value可以是任意类型Writable或者是自定义Writable。

1.5.在存储结构上,SequenceFile主要由一个Header后跟多条Record组成,Header主要包含了Key  classname,value classname,存储压缩算法,用户自定义元数据等信息,此外,还包含了一些同步标识,用于快速定位到记录的边界。每条Record以键值对的方式进行存储,用来表示它的字符数组可以一次解析成:记录的长度、Key的长度、Key值和value值,并且Value值的结构取决于该记录是否被压缩。


1.2:SequenceFile支持数据压缩

2.1.SequenceFIle的内部格式取决于是否启用压缩,如果是压缩,则又可以分为记录压缩和块压缩。

2.2.有一下三种类型的压缩:

A.无压缩类型:如果没有启用压缩(默认设置)那么每个记录就由它的记录长度(字节数)、键的长度,键和值组成。长度字段为4字节。

B.记录压缩类型:记录压缩格式与无压缩格式基本相同,不同的是值字节是用定义在头部的编码器来压缩。注意:键是不压缩的。下图为记录压缩:

640?wx_fmt=png

C.块压缩类型:块压缩一次压缩多个记录,因此它比记录压缩更紧凑,而且一般优先选择。当记录的字节数达到最小大小,才会添加到块。该最小值由io.seqfile.compress.blocksize中的属性定义。默认值是1000000字节。格式为记录数、键长度、键、值长度、值。下图为块压缩:

640?wx_fmt=png



1.3:优缺点


   SequenceFile优点:
A.支持基于记录(Record)或块(Block)的数据压缩。

B.支持splitable,能够作为MapReduce的输入分片。

C.修改简单:主要负责修改相应的业务逻辑,而不用考虑具体的存储格式。

  SequenceFile的缺点
A.需要一个合并文件的过程,且合并后的文件不方便查看。


2.SequenceFile类解析

SequenceFile类位于org.apache.hadoop.io包内,类结构如下:

640?wx_fmt=png 




3.读写SequenceFile源码实例

写过程 
1、创建Configuration 
2、获取FileSystem 
3、创建文件输出路径Path 
4、调用SequenceFile.createWriter得到SequenceFile.Writer对象 
5、调用SequenceFile.Writer.append追加写入文件 
6、关闭流 3

例子如下:

转载于:https://my.oschina.net/sniperLi/blog/775112

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值