连续两篇文章都聊了不同的存储格式,这篇我们继续深入来看看在存储格式的演变之上有什么新的"黑科技"。华为公司在2016年开源了类parquet的列存格式:CarbonData,并且贡献给了Apache社区。CarbonData仅仅用了不到一年的时间就成功毕业,成为了Apache社区的顶级项目,CarbonData是首个由华人公司主导的Apache顶级项目,(来源自eBay的Kylin算是首个由华人主导的顶级开源项目)笔者这里还是要向华为的小伙伴们致敬,能够完成这样一个从0到1的突破。
本篇笔者尝试从技术细节来梳理CarbonData与其“前辈”到底有何不同之处,我们在实际应用与设计存储格式时有什么可以借鉴汲取之处。

1.CarbonData

首先我们来看看CarbonData本身的定位,如下图所示:

单一存储数据满足多种数据应用场景
  • 1、支持海量数据扫描并取其中几列;
  • 2、支持根据主键进行查找,并在秒级响应;
  • 3、支持在海量数据进行类似于OLAP的交互式查询,并且查询中涉及到许多过滤条件,这种类型的workload应该在几秒钟内响应;
  • 4、支持快速地抽取单独的记录,并且从该记录中获取到所有列信息;
  • 5、支持HDFS,无缝对接Hadoop生态圈,天生带有分布式基因。

对于OLAP查询来说,存在多种不同类型的查询,存储结构的不同会影响到不同查询的数据表现。所以CarbonData的定位是作为一种通用的查询存储数据,通过Spark SQL来解决海量查询的问题,并且能够与Hadoop生态圈进行无缝对接。CarbonData最初的应用是与Spark SQLSpark DataFrame深度结合,后续由携程团队将CarbonData引入了Presto,滴滴团队将CarbonData引入Hive

其实无论是多维的OLAP查询,还是完整的扫描查询,还是部分范围查询。CarbonData的前辈ORCFile与Parquet都可以同样完成任务,那么作为新人,CarbonData有什么过人之处呢?

快,更快

下图是华为提供进行实测的数据,在绝大多数的测试场景之中CarbonData的性能都略优于Parquet。

TPC-H的查询测试

当然快速的查询是需要付出代价的,查询的快速所牺牲的是压缩率的减小与入库时间的延长。

TPC-H的入库与压缩测试

那我们接下来就是要详尽讨论CarbonData的性能表现与底层设计之间的逻辑关系。

文件结构

下图展示了CarbonData的数据存储格式:

图片.png
  • File Header
    文件头的格式比较简单,保存了存储格式的版本和模式信息。(这部分通常是稳定不可变的内容

  • Blocklet
    单Blocklet最大的容量阀值为64M,也就是说单个HDFS的Block可以容纳多个Blocklet(视Block的大小而定)。这块内容与ORCFile与Parquet的设计一脉相承,都是利用Pax的存储模型来优化数据查询时的性能表现。

  • File Footer
    在文件尾部保存了存储数据的索引和摘要,索引是CarbonData最为核心的关键实现,正是由于索引的存在,大大提高了CarbonData在不同查询场景之下的性能表现

二级索引

CarbonData通过支持了二级索引,大大的提高了CarbonData数据查询的性能表现。

CarbonData的二级索引

由上图所示CarbonData在HDFS Block级别与内部的Blocklet级别都分别建立起索引,这样可以大大减少非必要的任务启动与非必要的磁盘IO操作。众所周知,引入索引的的确确能够加快数据的查询速率,但是天下没有免费的午餐。我想CarbonData压缩率缩减与数据导入时间的延长的原因,想必读者心中也有了答案。

在Blocklet内部索引在内存之中B+树的形式实现

我们可以看到在CarbonData的文件尾部,通过B+树的方式来实现索引。由于HDFS追加写的特性,所以我想读者应该也能明白为何这些索引数据与统计数据需要存放在CarbonData的末尾。

通过二级索引的一次落地查询

上图完整的展现了一次过滤查询的流程,这个过程在二级索引的作用之下,规避了大量非必要的查询交互,由此带来的性能优化是十分明显的。

相对于ORCFile与Parquet相对简要的摘要索引,CarbonData在索引层面颇费心思。通过这样的方式来超越前辈,当然这样的选择设计同样也要付出额外的代价。

全局字典编码

这是CarbonData之中颇具争议的功能,在CarbonData之前的版本是默认添加的内容,目前在1.3版本之中是作为可选项加入其中的。(笔者在华为高斯部门工作的师兄也曾经和笔者吐槽过在生产环境之中,全局字典编码的似乎还存在一些'坑')所以看起来能够运用好字典编码的确是个值得探讨的问题,笔者在此也简单聊一聊:

CarbonData全局字典编码

如上图所示,全局字典编码的方式很简单,就是通过数字和字典来替换表格之中重复出现的数据。 这样的好处很明显:

  • 大大减少了表格数据所需要存储的数据量

  • 某些需要进行group by的字段进行全局字典编码,可以大量减少计算时的shuffle的数据量。以达到性能提升的目的。

但是在将数据导入CarbonData的过程之中,对与重复率较低的列,一旦建立起全局字典,显然会大大拖慢数据的导入速度,并且影响数据的压缩程度。而如果对于数据重复率较高的数据,例如性别,年龄等高重复数据,通过建立全局字典能够大大提升CarbonData的压缩程度,并且对数据导入的速率影响不大。

笔者建议:对于字典编码的使用,还是要根据具体也业务场景进行分析压测,给出较为合适的使用方式,盲目使用字典编码反而会对性能带来负优化。

2.小结

到此为止,笔者也大致聊完了对CarbonData存储结构的理解以及笔者在简单实践之中所引发的思考。 作为华人圈子之中首个由华人公司主导的Apache的顶级项目,笔者也会继续对CarbonData进行关注与学习,也希望将来华人程序员能够在开源圈之中继续扩大影响力。

大数据小视角3:CarbonData,来自华为的中国力量相关推荐

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

    前段时间一直在忙碌写毕设与项目的事情,很久没有写一些学习心得与工作记录了,开了一个新的坑,希望能继续坚持写作与记录分布式存储相关的知识.为什么叫小视角呢?因为属于随想型的内容,可能一个由小的视角来审视 ...

  2. eBay数据科学家李睿:自然语言处理在eBay的技术实践 数据 网络 类别 技术 分类器 阅读1593 近日,在飞马网主办的“FMI人工智能大数据高峰论坛”上,来自eBay的数据科学家李睿

    eBay数据科学家李睿:自然语言处理在eBay的技术实践 数据 网络 类别 技术 分类器 阅读1593  近日,在飞马网主办的"FMI人工智能&大数据高峰论坛"上,来自eB ...

  3. 大数据产品开发流程规范_华为内部资料流出!揭秘华为数据湖:3大特点、6个标准、入湖流程...

    点蓝色字关注"云技术" 导读:数据湖:实现企业数据的"逻辑汇聚". 作者:华为公司数据管理部来源:大数据DT(ID:hzdashuju)01 华为数据湖的3个特 ...

  4. 华为大数据中心山西_吕梁智能大数据产业技术创新研究院 、华为山西(吕梁)大数据中心吕梁职业技术学院大数据学院同日揭牌成立...

    图为吕梁智能大数据产业技术创新研究院揭牌仪式现场.记者王益炜摄 在第二届"数谷吕梁·智赢未来"吕梁大数据产业发展推介会举办之际,8月18日,吕梁智能大数据产业技术创新研究院.华为山 ...

  5. 2016大数据小盘点

    今天是2017年春节大年初一.记忆中,从上初中起,我就对过年不怎么感冒了.时间永不停歇,过年只是人为的加上了个标识.既然是标识,对个人而言,生日的意义也许更胜于过年. 然而过去的2016年,如果在许多 ...

  6. 2021中国大数据企业50强发布,华为云大数据连续六年入选

    7月29日,在2021中国大数据生态产业大会上,由大数据产业生态联盟联合赛迪顾问共同完成的<2021中国大数据产业发展白皮书>正式发布,同时基于白皮书调研结果,组委会权威揭晓"2 ...

  7. zstd优秀的数据压缩算法,大数据小数据包

    zstd是Facebook在2016年开源的新无损压缩算法,优点是压缩率和压缩/解压缩性能都很突出. 在我们测试的文本日志压缩场景中,压缩率比gzip提高一倍,压缩性能与lz4.snappy相当甚至更 ...

  8. 大数据小项目之电视收视率企业项目09--hive环境搭建

    Hive是一个数据仓库基础工具在Hadoop中用来处理结构化数据.它架构在Hadoop之上,总归为大数据,并使得查询和分析方便.并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务 ...

  9. 慧数汽车大数据报告:不畏严寒,2019年中国车市新机遇展望

    前言 2018年中国车市八九不离十会是负增长,2019年估计也好不到哪里,车市趋冷差不多成了整个行业的共识,就像一层乌云笼罩着整个车市的上空.但这不是问题的重点,关键要明确现在所处的阶段,未来的方向, ...

最新文章

  1. Java基础学习总结(21)——数组
  2. Linux源代码软件安装,Linux软件安装:源代码与软件安装
  3. 索引和未索引执行计划的比较_详解Oracle复合索引+实例说明
  4. mysql odbc.ini_ODBC连接mysql
  5. aix查看文件夹大小命令_轻松掌握 Linux 命令(1):ls 命令
  6. FLEX:DataGrid分页.
  7. c语言打印跳动的图案,c语言程序设计-跳动的三角形
  8. 新版 世界地图 中文版地图 国界地图 高清全彩矢量地图 CDR 2021年整理制作
  9. 多功能的Silverlight控件User Interface Edition for Silverlight下载及详细介绍
  10. linux之shell快速入门系列<8> | shell工具cut、sed、awk、sort
  11. 柯美6501服务器系统,柯美6501维修手册全-(1).pdf
  12. 图书-旅行-十年徒步中国:《信念:十年徒步中国》
  13. 传感器之热释电红外传感器
  14. win10杀毒防护已经关闭了还是删除文件解决方法
  15. PS-第四天-矢量形状与路径
  16. Taro2.* 小程序配置分享微信朋友圈
  17. QML窗口最大化、最小化、无边框
  18. 石油大学专升本计算机课程-计算机应用基础(1)
  19. AtCoder题解 —— AtCoder Grand Contest 050 —— B - Three Coins —— 动态规划
  20. 撕开市场缺口,认养一头牛“犟心”能给谁?

热门文章

  1. Spring 命名空间
  2. 建设有竞争力的APP开发团队
  3. 如何将程序添加到系统服务实现开机自启动
  4. thinkphp 使用外部php或html 原理
  5. 纯数学教程 Page 203 例XLI (6)
  6. 使用Eclipse更新软件时出现Unable to locate secure storage module错误的解决方法
  7. 对SQLSERVER进行性能监控
  8. 紫书 习题 10-44 UVa 11246 ( 容斥原理)
  9. Pentaho Data Integration 界面开发
  10. Oracle Rac 11R2添加节点