前言
一个偶然的机会,从某Spark微信群知道了CarbonData,从断断续续地去了解,到测试1.2版本,再到实际应用1.3版本的流式入库,也一年有余,在这期间,得到了CarbonData社区的陈亮,李昆,蔡强等大牛的鼎力支持,自己也从认识CarbonData到应用CarbonData,再到参与社区的转变,感谢他们!
要把CarbonData用得好,姿势必须正确:),优化步骤就必不可少,熟悉源码的必要性就不言而喻了,因此准备再进一步研究学习CarbonData源码,同时把学习中的一些点滴记录下来。目前,暂定推出四篇博客,从Create Table,Load Data(DataFrame.write),Select Data,及结合流式入库等四个方面来浅析下CarbonData源码。
简介
CarbonData是首个由中国公司发起并捐献给Apache基金会的开源项目,于2017年4月正式成为Apache顶级项目,由华为开源并支持Hadoop的高性能列式存储文件格式,其目的是提供一种统一的数据存储方案,以一份数据同时支持大数据分析的多种应用场景,All In One,并通过多级索引、字典编码、列式存储等特性提升 I/O 扫描和计算性能,实现百亿数据级秒级响应。CarbonData里程碑版1.3于2018年2月正式发布,该版本包含了集成Spark 2.2.1,支持预聚合,流式准实时入库,支持标准Hive分区等几个重要特性,而即将发布的1.4版本更是包含了支持Lucene Index加强文本检索能力,支持Bloom Filter Index等重要特性,在All In One的道路上又迈进了一步。
目前CarbonData与Spark,Presto, Hive等框架做了集成,其中与Spark的集成最深入,提供了基于索引、预聚合、全局字典等更多查询优化手段来提升性能,也提供了数据更新、删除、增量入库等数据管理能力,可以说是在Spark开源框架上针对数据仓库类应用的增强。一个计算框架方面的All In One,一个存储格式方面的All In One(其实CarbonData的功能已经远远超越了数据格式的范畴了),两者结合碰出的火花着实十分吸引人,这也是当初我会想要使用CarbonData并深入了解它的最根本原因。
此系列就是基于CarbonData里程碑版1.3的源码进行浅析。
Create Table浅析
建表语句兼容SparkSQL,只是使用‘carbondata’这个DataSource,并扩展了一些属性来描述Global Dictionary Columns,Sort Columns,Sort Scope等:
DICTIONARY_INCLUDE:指定做全局字典的列,主要用途在于:
压缩数据,String类型转换为Int进行存储,并采用RLE算法进