java sequencefile_SequenceFile介绍(转)

理解点:

1、二进制数据格式,在hadoop上进行mr任务时使用,一般是中间过程mr的输入输出数据

2、有一定的格式:头部+内容。头部标示SEQ

3、可通过read读取,

${JAVA_HOME}/bin/java -cp ${HADOOP_LIB}/hadoop-2-core.jar:${HADOOP_LIB}/commons-logging-1.0.4.jar:${bin} sequencefile.SequenceFileReader $fileName

4、读写会用到用到commons-logging-1.0.4.jar  hadoop-2-core.jar  sequencefile.env  sequencefile.jar 等

以下转载

SequeceFile是 Hadoop API提供的一种二进制文件支持。这种二进制文件直接将对序列化到文件中。一般对小文件可以使用这种文件合并,即将文件名作为key,文件内容作为value序列化到大文件中。这种文件格式 有以下好处:

1)支持压缩,且可定制为基于Record或Block压缩(Block级压缩性能较优)

2)本地化任务支持:因为文件可以被切分,因此MapReduce任务时数据的本地化情况应该是非常好的。

3)难度低:因为是Hadoop框架提供的API,业务逻辑侧的修改比较简单。

坏处是需要一个合并文件的过程,且合并后的文件将不方便查看。

SequenceFile 是一个由二进制序列化过的key/value的字节流组成的文本存储文件,它可以在map/reduce过程中的input/output 的format时被使用。在map/reduce过程中,map处理文件的临时输出就是使用SequenceFile处理过的。

SequenceFile分别提供了读、写、排序的操作类。

SequenceFile的操作中有三种处理方式:

1) 不压缩数据直接存储。 //enum.NONE

2) 压缩value值不压缩key值存储的存储方式。//enum.RECORD

3)key/value值都压缩的方式存储。//enum.BLOCK

SequenceFile提供了若干Writer的构造静态获取。

//SequenceFile.createWriter();

SequenceFile.Reader使用了桥接模式,可以读取SequenceFile.Writer中的任何方式的压缩数据。

三种不同的压缩方式是共用一个数据头,流方式的读取会先读取头字节去判断是哪种方式的压缩,然后根据压缩方式去解压缩并反序列化字节流数据,得到可识别的数据。

流的存储头字节格式:

Header:

*字节头”SEQ”, 后跟一个字节表示版本”SEQ4”,”SEQ6”.//这里有点忘了 不记得是怎么处理的了,回头补上做详细解释

*keyClass name

*valueClass name

*compression boolean型的存储标示压缩值是否转变为keys/values值了

*blockcompression boolean型的存储标示是否全压缩的方式转变为keys/values值了

*compressor 压缩处理的类型,比如我用Gzip压缩的Hadoop提供的是GzipCodec什么的..

*元数据 这个大家可看可不看的

所有的String类型的写操作被封装为Hadoop的IO API,Text类型writeString()搞定。

未压缩的和只压缩values值的方式的字节流头部是类似的:

*Header

*RecordLength记录长度

*key Length key值长度

*key 值

*是否压缩标志 boolean

*values

剩下的大家可看可不看的,并非这个类中主要的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值