• HDFS进阶


    一、hadoop 序列化与反序列化

    Hadoop 通过Writable接口实现序列化机制

    Writable 接口中主要有两个方法:
    wirte(DataOutput out)
    readFields(DataInput in)

    对象在实现这个接口时,属性既可以是java 类型的,也可以是 Hadoop类型的。
    实现write 方法时:将对象转化为字节流并写入到输出流out中。
    如果属性是java类型的,out.write(name);(name 是对象中的一个属性)
    如果属性是 Hadoop类型的,name.write(out);

    实现readFields时,从输出流中读取字节流并反序列化对象。
    java:in.readFields(name)
    Hadoop: name.readFields(in)

    二、SequenceFile

    SequenceFile:Hadoop 可以通过 SequenceFile 对小文件进行合并,获得更高的存储效率。Hadoop提供的SequenceFile文件格式提供一对key,value形式的不可变的数据结构,方便对二进制文件进行处理。二进制文件可以直接将<Key,Value>对序列化到文件中。SequenceFile 中的key 和value 可以是任意类型的Writable 或者自定义的Writable类型。HDFS和MapReduce job使用SequenceFile文件可以使文件的读取更加高效。SequenceFile 内部结构如下:

    如果没有压缩,每个记录由记录长度(4字节)、键长度(4 字节)、键和值组成,如果启动了压缩,那么value 就是压缩后的值。

    SequenceFile 特点:可以定制基于Record(记录)和Block(块)压缩。
    Record 针对行压缩,只压缩Value 而不压缩 Key , 而Block 对Key 和 Value 都压缩。

    MapFile:MapFiel 是排过序的SequeceFile,由两部分构成,分别是index 和 data,index 作为文件的数据索引,存储了record 的key 值。以及该record 在文件中的偏移位置。在MapFile 被访问的时候,索引文件首先会被加载到内存。通过映射关系可以迅速找到record 所在文件中的位置。MapFile 的检索效率更高,但是要消耗额外的内存来存储index数据。

  • 相关阅读:
    Pyhont 高阶函数
    Python 函数式编程
    Python 递归函数
    Python 函数的参数定义
    Lniux学习-AWK使用
    Windows10 下 VirtualBox6 中 Centos8 无法安装"增强功能"
    Linux学习-Shell-系统启动过程与执行方式
    接口测试-工具介绍
    Linux学习-Sed 命令
    Linux学习-命令行参数、函数
  • 原文地址:https://www.cnblogs.com/wbringarden/p/10219507.html
Copyright © 2020-2023  润新知