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

上一篇文章聊了聊基于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的概念。引入了三个新的组件,我们分别来看看对应组件的内容:

  • (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
    );

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

  • (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定义了一个组合类型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大同小异,笔者在这里就不进赘述了:

3.ORCfile与Parquet的比较

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

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

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

原文地址:https://www.cnblogs.com/happenlee/p/9087273.html

时间: 2024-11-08 23:03:39

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

大数据小视角1:从行存储到RCFile

前段时间一直在忙碌写毕设与项目的事情,很久没有写一些学习心得与工作记录了,开了一个新的坑,希望能继续坚持写作与记录分布式存储相关的知识.为什么叫小视角呢?因为属于随想型的内容,可能一个由小的视角来审视海量数据的存储与计算技术,把知识点分为两到三章来梳理.管中窥豹,可见一斑,希望能利用这个过程提高自己,也欢迎阅读的朋友多指正. 第一章先从Facebook的一篇论文<RCFile: A Fast and Space-efficient Data Placement Structure in MapR

大数据平台最常用的30款开源工具

大数据平台是对海量结构化.非结构化.半机构化数据进行采集.存储.计算.统计.分析处理的一系列技术平台.大数据平台处理的数据量通常是TB级,甚至是PB或EB级的数据,这是传统数据仓库工具无法处理完成的,其涉及的技术有分布式计算.高并发处理.高可用处理.集群.实时性计算等,汇集了当前IT领域热门流行的各类技术. 本文整理出了大数据平台常见的一些开源工具,并且依据其主要功能进行分类,以便大数据学习者及应用者快速查找和参考. ▲ 大数据平台常见的一些工具汇集 主要包含:语言工具类.数据采集工具.ETL工

大数据小项目之电视收视率企业项目实战01

一.VM安装(这个大家去百度吧....) 二.centos安装 版本:centos7 'https://jingyan.baidu.com/article/a3aad71aa180e7b1fa009676.html(具体可以看这个) 1.安装好之后,始终用自己的用户名操作(这个很重要,因为如果在不同的用户下登录,一旦出现问题,那就会搞死你的,哈哈哈) 2.网络配置 a.右键选择Centos客户机. b.点击"设置" c.网络适配器. 或者 注意:设置静态IP时,IP地址必须在192.1

分享《大数据治理与安全从理论到开源实践》+刘驰

下载:https://pan.baidu.com/s/1x8v2oHr5vmeZiT7cFsRX0g 更多资料下载:https://pan.baidu.com/s/1lMO23nnrIag8Glvy2Be0Iw 更多资料分享:http://blog.51cto.com/14087171 首页如图: 原文地址:http://blog.51cto.com/14087171/2331836

小草说----大数据和机器学习为什么这样火

小草说--大数据和机器学习为什么这样火 标签(空格分隔): SPARK机器学习 欢迎关注小小草的微信号:大数据机器学习.日后不定期分享大数据,机器学习的学习资料与博文,希望与大家共同学习进步~ 很多年前,当我还在应付着微分方程,条件概率,用问卷星写抽样调查报告在QQ群发求填,对着30多条就被称为大样本的数据做检验和回归的时候,"大数据"的概念已经如火如荼地在微博圈和朋友圈里圈圈相传了. 但是到底大数据是什么,和我们生活有什么关系,企业是怎么"大数据"的,它到底在星星

开源大数据查询分析引擎现状

引言 大数据查询分析是云计算中核心问题之一,自从Google在2006年之前的几篇论文奠定云计算领域基础,尤其是GFS.Map-Reduce.Bigtable被称为云计算底层技术三大基石.GFS.Map-Reduce技术直接支持了Apache Hadoop项目的诞生.Bigtable和Amazon Dynamo直接催生了NoSQL这个崭新的数据库领域,撼动了RDBMS在商用数据库和数据仓库方面几十年的统治性地位.FaceBook的Hive项目是建立在Hadoop上的数据仓库基础构架,提供了一系列

拓扑学——探寻大数据的内在模式

拓扑学——探寻大数据的内在模式 点击上方“大数据文摘”可以订阅哦! 大数据文摘作品,欢迎个人转发朋友圈:其他机构.自媒体转载,务必后台留言,申请授权. 作者:Kevin Knudson编译:数码叮叮 校对:于丽君,康欣 编辑:Ivy 如果我们不能明白如何分析它,这些数据有什么好? 大数据正被媒体.工业和政府所瞩目.公司和实验室不停地产生大量的数据,从气象资料到携带电话的使用到医疗记录,与每件事相关.而每一套数据又和成百个变量相关. 这些数据量之大.规模之复杂,用传统的方式来寻找数据之间的模式已不

蔡先生论道大数据之九: 要的就是&quot;快&quot;

前面几章节谈论了企业如何利用大数据帮助企业建立精准营销模型,大家了解了"大数据"\"小数据",那么数据本身的问题解决了,今天我说一下另外一个非常重要的概念,就是"即时性". 可以说大数据最重要的意义之一是解决了营销上的"实时性"问题,在当下手机.平板多屏运作,快速处理用户的点击信息,分析用户属性,放出购买信息,这样实时的能力在商业中越来越重要.也是大数据在实际应用中需要突破的瓶颈. 举个例子,2008年前某国每个月都要统计数据

大数据为开源情报注入新力量

2013年11月,<纽约客>发表了介绍艾略特?希金斯的文章,他的另一个被大众所熟知的名字叫布朗?摩西,在微博上有一万七千个粉丝,是一位肄业的金融管理工作者.艾略特?希金斯的例子证明了,在一个人们每天依赖于来自网络传播而来的海量信息的时代,一切皆可发生. <纽约客>利用八页来描述希金斯为"也许是(叙利亚)战争中最重要的弹药专家," 对于一个在弹药和情报学没有接受过任何专业训练的人来说,这是一个相当高的评价. 希金斯不会说阿拉伯语,从未去过中东地区.他在莱斯特的家里