大数据小视角2:ORCFile与Parquet,开源圈背后的生意

本文涉及的产品
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
简介: 上一篇文章聊了聊基于PAX的混合存储结构的RCFile,其实这里笔者还了解一些八卦,RCfile的主力团队都是来自中科院的童鞋在Facebook完成的,算是一个由华人主导的编码项目。

上一篇文章聊了聊基于PAX的混合存储结构的RCFile,其实这里笔者还了解一些八卦,RCfile的主力团队都是来自中科院的童鞋在Facebook完成的,算是一个由华人主导的编码项目。但是RCfile仍然存在一些缺陷,后续被HortonWorks盯上之后上马了ORCFile格式,而老对头Cloudera则紧抱Google大腿推出了Parquet格式。 其实二者需要解决的问题是殊途同归的,但是不同的爹似乎导致了不太相同的命运。这篇文章,我们主要还是聊聊两者的技术细节,再穿插一些开源圈的商业八卦~~~

1.ORCFile

Facebook在 2011年的 ICDE 会议之上发布了RCFile。之后RCFile在Hive之中作为很好的列存储模型被广泛使用,虽然RCFile能够很好的提升Hive的工作性能,但是在Facebook论文之中也提出了一些RCFile值得改进的地方。所以在2013年,HortonWorks就在RCFile的基础之上开发出了ORCFile,并且ORCFlie很顺利地在2015年成为Apache的顶级项目。接下来我们来看一看ORCFile相对于原本的RCFile解决了什么样的问题:

  • 列数据的类型感知:与RCFile之前对于列数据都统一为Blob数据不同,ORCFile可以感知列的数据类型,做出更为合理的数据压缩选择。显然,这样可以节省不少存储资源。(Facebook论文之中已经提到这个思路了,但是发布论文的时候还没有实现,属于一个next to do的工作

  • 嵌套数据类型支持:ORCFile可以在列数据之中插入Struct,Union,List,Map等数据,让数据的操作更加灵活,也更加适合非结构化数据的存储与处理。

  • 谓词下推:这个算是RCFile原先功能的补强,在元数据层面增加了很多内容,来利用谓词下推加速处理的过程。ORCFile自己称之为轻量级索引,其实就是一些相较于RCFile更为详细的统计数据。

存储结构

首先,我们先来看看ORCFile的存储结构。如下图所示,ORCFile完全抛弃了原有RCFile之中所谓Row Group的概念。引入了三个新的组件,我们分别来看看对应组件的内容:


ORCFile的存储结构
  • (1) stripe:stripe是ORC文件的主体,还记的上文提到RCfile之中的Row Group的大小为4MB,而stripe的大小膨胀到了250MB。(果真还是越大越好么~~)至于为什么选择250MB这个大小的用意也很明显,是为了与底层HDFS的块大小契合,来减少MapReduce处理时可能会带来的通信损耗。 stripe也分为具体三个部分:

    • Index Data:存储每行的统计数据,默认是10000行的大小。Index Data在Strip的最前面,因它们只在使用谓词向下推或读者寻找特定行时加载。(这里主要利用的是统计信息与布隆过滤器实现的
    • Row Data:实际存储数据的单元,利用列存原理,对不同列可以实现不同压缩方案,所有的列数据可以组成行数据。
    • Stripe Footer:存储了每个列的编码与位置。
  • (2) File Footer:部分包含Row data的布局、类型信息、行数和每个列的统计信息。通过这块可以筛选出需要读取列的数据。至于类型消息,假如有如下的表定义:

  create table Foobar (
    myInt int,
     myMap map<string,
     struct<myString : string,
     myDouble: double>>,
     myTime timestamp
);

则定义的类型是如同下图的嵌套模式:


ORCFile的类型
  • (3) PostScript:这块保存的内容就是ORCFile的元数据了,包括了使用的压缩类型,各个数据的长度等。由于HDFS只支持Append的操作,所以,元数据放在文件的末尾是便于修改的。

上述就是ORCFile核心的存储结构了。对比原先的RCFile,ORCFile没有标新立异的之处,只是补足了数据压缩与数据处理的短板。

2.Parquet

Google同样在 2010年发布了最新交互处理的数据系统Dremel,并且在Dremel之上构建了一个与Protocol Buffer兼容的数据模型。基本上Google推出啥,开源圈一定会照猫画虎的弄一个出来。于是同样在2013年,ClouderaTwitter针对Dremel的数据模型为模板,推出了Parquet,Parquet同样在2015年顺利“毕业”,成为Apache的顶级项目。

其实Parquet与ORCFile像是孪生兄弟,许多设计的思路与细节是相同的,都是列存储,数据压缩那一套。所以这里笔者不展开来讲Parquet的技术细节了,而是结合Google的论文,来看一看Parquet与ORCFile最大的区别:数据模型

数据模型

为了兼容Protocol Buffer的嵌套结构,Google的工程师设计了很精巧的模型来将Protocol Buffer的结构落地到实际的存储结构之中。坦白说,这或许是Google内部为了兼容Protocol Buffer而实现的一个很trade off的设计,所以看起来有点奇怪:

Protocol Buffer的数据格式

如上图所示,通过Protocol Buffer定义了一个组合类型Document,其中required字段是必须填写的,optional字段是可以省略的,而repeated字段是可以重复的字段。其中I1与I2为示例数据。如何将上述的数据模型转换为列存呢?我们接着往下看:

将嵌套字段切分之后变为列存的模式

首先,将上述结构之中每一个字段拆分出来,就可以变为列存储的模式了。但是接下来的问题在于如何处理非结构化数据之中repeated与optional字段。这里是通过Repetition LevelDefinition Level才能来完整的还原数据的结构。

  • Repetition Level:顾名思义,记录了该列的值是在哪一个级别的字段上重复的。
  • Definition Level:对于非NULL值并没有什么意义,因为非NULL值Definition Level一定是相同的。(显然是可以压缩存储)记录了该列的值是在哪一个级别上开始作为NULL值存储的。

通过上述的两个值,便可以通过有限状态机来还原Protocol Buffer格式所定义的数据结构,落地到实际的存储之中。(这里涉及到列存储的跳转,详细的内容可以参考Dremel论文的原文

上述Parquet的核心就在于:通过嵌套的数据模型设计来规避Join操作和扫描最少的列存储。下图是Parquet的数据模型,可以看出除了列存的模式之外,其余与ORCFile大同小异,笔者在这里就不进赘述了:

Parquet的数据结构

3.ORCfile与Parquet的比较

目前两者都作为Apache的顶级项目来进行维护,但是无论是设计的思路还是合理性都是ORCFile更为优秀。简单来说,对于OLAP的应用,本身就是需要通过ETL的流程进行数据的格式复写,对于Protocol Buffer的兼容的必要性这块,笔者是存疑的。

但是或许是因为背后所主导的力量不同,毕竟是出身名门,在各个存储系统的支持上,和实际的运用之中,Parquet还是占了很大的优势。纵观It产业的历史发展,从来都不是因为技术优势而能够赢得赛跑的。从ORCFile与Parquet目前在开源上的不同境遇来看,也符合两家公司的在资本市场上的表现吧。

Hortonworks市值为13.63亿美元
Cloudera市值为20.49亿美元

但是无论商业竞逐上的胜利与失败,能够开源好的技术来便利开发者与使用者,应该都是一件功德无量的事情。

相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps&nbsp;
目录
相关文章
|
4月前
|
存储 SQL 分布式计算
开源大数据比对平台设计与实践—dataCompare
开源大数据比对平台设计与实践—dataCompare
157 0
|
4月前
|
SQL 大数据 关系型数据库
开源大数据比对平台(dataCompare)新版本发布
开源大数据比对平台(dataCompare)新版本发布
211 0
|
4月前
|
SQL 存储 分布式计算
从0到1介绍一下开源大数据比对平台dataCompare
从0到1介绍一下开源大数据比对平台dataCompare
308 0
|
10月前
|
机器学习/深度学习 分布式计算 大数据
开源大数据平台的发展
开源大数据平台的发展
115 0
|
1月前
|
数据可视化 大数据 定位技术
GIS:开源webgl大数据地图类库整理
GIS:开源webgl大数据地图类库整理
|
2月前
|
存储 机器学习/深度学习 大数据
参与开源大数据Workshop·杭州站,共探企业湖仓演进实践
Apache Flink 诚邀您参加 7 月 27 日在杭州举办的阿里云开源大数据 Workshop,了解流式湖仓、湖仓一体架构的最近演进方向,共探企业云上湖仓实践案例。
157 12
参与开源大数据Workshop·杭州站,共探企业湖仓演进实践
|
17天前
|
机器学习/深度学习 监控 大数据
Serverless 应用的监控与调试问题之Flink在整个开源大数据生态中应该如何定位,差异化该如何保持
Serverless 应用的监控与调试问题之Flink在整个开源大数据生态中应该如何定位,差异化该如何保持
|
2月前
|
机器学习/深度学习 分布式计算 大数据
MaxCompute 2.0:开源系统的集成与创新
增强实时处理能力:进一步加强与Flink等实时处理框架的合作。 强化机器学习支持:提供更多内置的机器学习算法和工具。 增强数据治理功能:提供更完善的数据质量和安全治理方案。
|
3月前
|
存储 分布式计算 大数据
MaxCompute产品使用问题之创建了oss外表,格式指定的parquet,然后执行的写入,发现不是标准parquet的格式,该怎么办
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
|
10月前
|
人工智能 分布式计算 大数据
开源大数据平台 3.0 技术解读
阿里云研究员,阿里云计算平台事业部开源大数据平台负责人王峰围绕新一代的流式湖仓、全面 Serverless 化、更智能的开源大数据等多维度解读开源大数据平台 3.0~
1224 1
开源大数据平台 3.0 技术解读

热门文章

最新文章