hadoop生态圈-- 个人笔记学习03 文件存储格式

传统文件存储格式:就jpeg,mp3,doc等

server/ host上,由块设备,如硬盘。软盘等

    每个文件系统将一个分区拆为多个块存储文件,文件系统块大小不同

hadoop没有默认文件格式,格式选择取决用途。在HDFS应用程序(如MapReduce or Spark)中, 性能瓶颈在于特定位置查找数据和写入消耗的时间。管理大量数据也很复杂(数据的存储,数据格式变化)

需要选择合适的文件格式

  1. 保证读写速度
  2. 文件可切分
  3. 压缩支持
  4. schema更改支持

数据处理的不同阶段使用不同格式:发挥优势

Hadoop 存储格式

Text File

文本文件,每一行一条记录。文本文件可以被切分。 若要压缩文件,需要压缩解码器(支持切分文件)

场景:直接从文件加载大量数据情况下建议使用纯文本or csv

优点:

  1. 简单
  2. 轻量

缺点

    读写慢 不支持块压缩,hadoop压缩、解压读取成本较高

Sequence File

数据以kv序列化存储, Sequence数据以二进制格式存储,内部不支持对kv结构指定格式编码

多数作为 中间数据结构,大量小文件合并于SequenceFile中

优点

    紧凑 支持块级压缩 压缩的同时可以切分文件 序列文件支持别的项目 摆脱文本文件 大量小文件的容器

缺点

    对SQL的Hive支持不好,要读取解压所有字段 不存储元数据 扩展唯一方法为append

Avro File

语言无关的序列化系统。基于行,包含JSON的schema定义,提高互操作性允许schema变化(删除行列) 可切分、可压缩。 schema直接编码存储在文件里面,存复杂结构数据,可以快速sequentialize,序列化数据较小

场景

    一次性把大量数据(列)写入或频繁写入的场景

一行数据序列化于一个block里面

优点

  1. 操作少量列较低效,行存储效率较低(读某两列数据,那么可能需要读取全部的行)此时列式存储效率更高效
  2. 列式将同一列(类数据存在一起)压缩率更高

RCFile

基于MR的数据仓库系统设计的数据存储结构,结合了行存储和列存储的优点。满足快速加载和查询 —— 利用存储空间,适应高负载需求。 二进制kv组成的flat文件。

分析的时候一般使用列存储

    数据分为几组行,数据存储在列中 行水平拆分 row group,然后列方式垂直划分 columns 行存储:RCFile保证一行数据在一个节点中 RCFile用列数据压缩,跳过不必要的列读取

优点

  1. 列式储存 压缩比更好
  2. 元数据支持数据类型
  3. 支持split

缺点 不支持schema扩展,如果要添加新的列,需要重写文件

ORC

优化行列,比RC更优化存储数据。原始数据大小最多减小75%

性能高,列数据单独存储,类型专用编码器,轻量级索引

Parquet

列式存储,二进制,可存储嵌套数据结构

    合适压缩,合适查询 —— 特别是特定列 写入速度较慢。

压缩文件的选择

    若文件不可切分 —— 只有一个CPU处理文件,其他CPU空闲,影响效率 支持切分的算法可能压缩解压缩较慢,影响查询效率
经验分享 程序员 微信小程序 职场和发展