EN
返回档案库

案例库 · 软件与 IT · 技术决策 · 2013

Twitter与Cloudera的Parquet按列存储数据,成为大数据默认格式

Parquet将表按列而非按行存储,因此分析只读取所需列,文件压缩效果也更好。

Twitter · Cloudera

那一手

在Hadoop上做分析时,记录按行读取,因此即使查询只需要一个工资字段,也会拉取每个员工的完整记录,而且异构记录压缩效果差。Twitter自己的数据集嵌套七层深,有超过80个叶子节点。

Twitter和Cloudera构建了Parquet,这是一种开源的Hadoop列式存储格式。它不按行写入,而是按列写入:所有姓名,然后所有年龄,再然后所有工资。它的重大成就是利用Google Dremel的记录切分算法和共享编码规范,将嵌套数据切片到列中。

因为一列只包含一种类型,通用和类型特定的压缩都能改善,而且查询引擎可以跳过不需要的列。自动字典编码加上位打包和游程编码,可以进一步压缩其他数据。Parquet不绑定任何序列化库,因此许多引擎都采用它。

Parquet 1.0于2013年7月发布,贡献者来自Twitter、Cloudera、Criteo、Berkeley AMPLab和Stripe,并且已经在Twitter生产环境中运行。

为什么管用

  • 同质的列值比混合的行压缩效果好得多,因此文件变得更小。
  • 查询只加载所需的列,因此I/O和成本大幅下降。
  • 通过Dremel对嵌套数据进行切片,意味着复杂模式也能适合列。
  • 不依赖框架,使每个引擎都能采用它而无需重写。
值了多少按列存储,使分析跳过不需要的列聪明

可以搬走什么

当瓶颈是读取和压缩时,改变物理布局,而不是逻辑:将同质值存储在一起,使昂贵的I/O缩减,文件也免费变小。

后来呢

Parquet 1.0于2013年7月发布,并迅速成为Hadoop和Spark生态系统的默认列式格式,然后是数据湖、湖仓一体和云数仓。现在它是支持最广泛的开源存储格式之一,用于任何需要快速、廉价扫描宽表的分析场景。

资料来源

发现哪里写错了?告诉我们。

同一路聪明