这是我参加「第四届青训营」笔记创作活动的的第 7 天。
01. 列存 VS 行存
1.1 数据格式层概述
- 计算层:各种计算引擎
- 储存层:承载数据的持久化储存
- 数据格式层:定义了存储层文件内部的组织格式,计算引擎通过格式层的支持来读写文件
- 严格意义上,并不是一个独立的层级,而是运行在计算层的一个Library
在计算层,有各种计算引擎解决不同场景的问题,例如
- Spark 主要适用于批式查询场景
- Flink 主要适用于流式处理场景
- Presto 主要适用于交互式查询场景
- Hive 作为 Hadoop 框架上最早的SQL数仓产品,内置了 Hive Metastore (HMS) 组件,计算引擎上支持 Map-Reduce、Tez以及 Spark。目前 HMS 依然作为大数据场景下使用最为广泛的元数据服务。
在存储层,HDFS 是 Hadoop 生态里第一个分布式存储服务,大数据生态里几乎所有的计算引擎都是基于 HDFS 协议和 HDFS Client 构建的。目前距离 HDFS 的发布已经有十多年的历史了,但是 HDFS 依旧在大数据存储领域占据重要的地位。
近年来,随着公有云的大力发展,对象存储最为云上的存储底座,具有低成本、高可用、超大容量等优势,越来越多的云上大数据计算生态选择基于对象存储去构建。各个云产商的对象存储会提供各自的 HDFS Client 插件,支持以 HDFS Client 和协议访问对象存储。典型的例如:
1.2 分层视角下的数据形态
- 存储层:File,Blocks
- 格式层:File 内部的数据布局 (Layout + Schema)
- 计算引擎:Rows + Columns
1.3 OLTP vs OLAP
1.4 OLPT:行存式储存格式
- 每一行 (Row) 的数据在文件的数据空间里连续存放的
- 读取整行的效率比较高,一次顺序 IO 即可
- 在典型的 OLTP 型的分析和存储系统中应用广泛,例如:MySQL、Oracle、RocksDB 等
1.5 OLAP:列存式储存格式
-
每列的数据在文件上是连续存储的
-
读取整列的效率较高
-
同列的数据类型一致,压缩编码的效率更好
-
典型系统
- 大数据分析系统:Hive、Spark,数据湖分析
- 数据仓库:ClickHouse,Greenplum,阿里云 MaxCompute