目录
3.4 ORC、Parquet 和 CarbonData 对比
一、前言
1.1 概述
文件存储格式:文件存储格式是数据在磁盘上的组织方式,直接决定了数据存取效率以及被上层分布式计算集成的容易程度。
1.2 常见存储格式
创建的存储格式包括 行式存储 和 列式存储 两种:
行式存储 以 文本格式Text File、key/value 二进制存储格式 Sequence File 为典型代表。
列式存储 以 ORC、Parquet 和 Carbon Data 三种文件格式为代表。
1.3 行列存储数据组织方式
数据(每一行由若干列构成)在行存储和列存储系统中组织方式如下图所示。行存储以行为单位进行存储,读写过程是一致的,都是连续读取或写入同一行的所有列;列存储写数据时将数据拆分成列,并以列为单位存储(相同列存储在一起),读数据时,分别读取对应的列,并拼装成行。
1.4 行列存储优缺点对比
1.5 Hadoop 的 数据存储格式实现
大数据应用场景下,通常需要在计算层并行处理文件,为了应对这种场景,Hadoop 将文件读取和写入模块抽象成 InputFormat 和 OutputFormat 组件,其中 InputFormat 可将数据文件逻辑上划分成多个可并行处理的 InputSplit,OutputFormat 可将数据以指定的格式写入输出文件。Hadoop 为常见的数据存储格式分别设计了 InputFormat 和 OutputFormat 实现,以方便像 MapReduce、Spark 等上层计算框架使用。
二、行存储格式
2.1 文本格式(Text File)
文本格式是以文本字符串方式保存数据,具有简单、易查看等优点,是使用最广泛的行式存储格式,几乎所有的编程语言均提供了文本文件的读写编程接口。
2.2 Sequence File
Sequence File 是 Hadoop 中提供的简单 key/value 二进制行式存储格式,可用于存储文本格式无法存储的数据,比如二进制对象、图片、视频等。为了方便上层计算框架并行处理,Sequence File 物理存储上是分块的,根据压缩方式不同,Sequence File 存在三种存储格式,具体如下:
(1)未压缩的 Sequence File
未压缩的 Sequence File 组织方式如下图所示,由头部开始,顺序跟着一系列record(一条行记录),为了便于对数据分块和按块压缩,每个一定数目的record会写入一个同部位 SyncMark。头部中包含版本、key对应类、value对应类、是否压缩等信息;每条record