zoukankan      html  css  js  c++  java
  • SequenceFile 简单介绍

    SequeceFile是Hadoop API提供的一种二进制文件支持。这种二进制文件直接将<key, value>对序列化到文件中。一般对小文件可以使用这种文件合并,即将文件名作为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

    http://blog.163.com/jiayouweijiewj@126/blog/static/17123217720101121103928847/

  • 相关阅读:
    Windows 8 C#调用C++编写的Windows运行时组件
    Metro style App Datetime formating.
    《编程匠艺》读书笔记之一
    ContextMenu的使用
    单例模式
    c# 类中字段属性设计
    Metro style app 文件查找
    Win 8 学习资料汇总
    Metro C++ 初体验 第二周
    Metro style app 文件、文件夹的选择、文件的保存。
  • 原文地址:https://www.cnblogs.com/dlutxm/p/2179164.html
Copyright © 2011-2022 走看看