作者:Jacky Li,Ravidra Pesala
CarbonData 1.6发布在即
当我们在2016年启动CarbonData项目时,其目标是为各种数据分析方案提供统一的数据解决方案。三年过去了,CarbonData已经发展成为多种场景的流行解决方案,这些场景包括
- 基于明细数据的adhoc分析
- 近实时流数据分析
- 具备更新能力的大规模历史数据
- 具有物化视图和SQL重写功能的数据集市
在即将发布的CarbonData 1.6.0中,我们增加了很多使用功能,进一步提升了CarbonData在上述场景中的能力:
- 分布式索引服务器,为超大规模数据提供Block Pruning。在现实世界的用例中,CarbonData支持单表10万亿条记录,且具备秒级查询响应。
- 可调整的索引键,现在用户可以在创建表后随时更改SORT_COLUMNS索引键,这使用户在随着业务发展,对数据有了更多理解后,能够随时调整其数据组织方式,以提升查询性能。
- 正式支持spark,presto,hive,实现一份可靠数据给多个计算引擎消费。
- 生产ready的物化视图和SQL重写,这是加速数据集市场景中查询性能的必备功能。
正因为CarbonData这些独特的功能,已经有很多用户在生产系统中部署了CarbonData的开源版本或商业版本,覆盖互联网,电信,金融和银行,智能城市等行业。
迈向CarbonData 2
一方面,随着Apache Carbon接近1.6.0版本,支持上述场景的技术变得成熟并且生产就绪。另一方面,数据分析负载和运行时环境变得比三年前更加多样化,例如,云环境需要更复杂的数据管理用于云存储,AI需要对非结构化数据进行数据管理。因此,现在是讨论CarbonData未来的时候了。
首先,为了使CarbonData 2定位更为有前瞻性,我们需要分析一下数据分析领域近来的变换和趋势。
在我看来,数据世界有3种趋势
趋势1:Data Lake和Data Warehouse正在融合
随着越来越多的项目依赖于数据湖,越来越多的用户发现数据湖缺乏与数据仓库相比的一些基本特征,如数据可靠性和性能,而数据仓库因规模而臭名昭着。因此,为了满足业务目标,数据湖和数据仓库通常以互补的方式使用。
趋势2:云的普及使数据管理更加复杂
凭借弹性和低成本,云正在改变企业存储和分析数据的方式。越来越多的用户使用私有云和公共云技术,他们享受云带来的好处,但他们也必须面对越来越复杂的数据管理场景,如数据上传、异构存储管理、混合云数据同步、云内云间数据备份等。如果管理不善,企业甚至会发现出现了更多的数据孤岛。
趋势3:AI为数据管理带来了新的挑战
如今,人工智能在应用中无处不在。根据行业研究,在对模型进行训练之前,80%的努力都花费在数据准备上,而使用流行的深度学习技术,非结构化数据在AI领域占据主导地位,大量的图片、文本、音频的小文件作为数据资产,就像传统结构化数据一样要纳入企业数据管理。
CarbonData 2的目标
为了应对这些挑战,CarbonData 2的目标为:
目标:为数据仓库+数据湖+AI构建一个统一数据管理平台,以可靠地方式管理大规模和多样化的数据。
它可以用于
具有高可靠性和高性能的数据湖
具有计算存储分离高可扩展性和灵活性的数据仓库
具备针对混合云数据管理能力,以及支持AI数据管理
最后,我们期望它可以以下图方式给用户带来帮助:
我们应该如何实现这些目标?为实现这一目标,我们必须利用CarbonData 1.x的优势,并针对这些目标添加新功能。所以,在进入CarbonData 2之前,我们可能会问自己究竟是什么让CarbonData 1.x独一无二。
我总结如下:
- Segment数据组织,它是实现大规模,快速数据加载,事务操作管理的基础
- 物化和分布式的元数据,CarbonData的元数据是物化到存储层的,这为它奠定了大规模处理能力的基础,以及易于做数据和元数据整体迁移。
- 多级索引,它提供了快速查询性能的同时为用户提供可调整的数据加载性能。
- 基于main-delta的数据更新实现,且支持ACID事务性。它满足了许多在传统大数据平台无法支持的数据更新场景,同时对文件系统的IO影响最小化。
这些特点,使得CarbonData能胜任更多的数据分析场景。在迈向CarbonData 2.x时,这些特点都应被保留并继续深度挖掘其潜力。
CarbonData 2路标
最后,我们提出以下CarbonData 2路标初稿,我们希望有更多人参与到这个路标的指定中,被接纳的特性将在未来的2.x版本中陆续实现。
Segment插件接口
- 重构代码,抽象*Segment插件接口*,使其格式中立以允许社区开发人员添加新的插件,例如增加新的数据格式。
- 以下格式可能在初始迭代中作为内置插件支持:Carbon行存,Carbon列存,csv;社区未来可以支持更多格式插件
事务性的Segment操作
- 在Segment上支持事务型操作,使云上的数据管理符合ACID要求。
- 提供更多针对Segment的管理操作,这些操作可作为更多数据管理场景的基础,例如冷热数据管理、缓存、混合云数据迁移、备份等
- 增加Segment,可以指定Segment的格式:ALTER TABLE ADD SEGMENT
- 删除Segment:ALTER TABLE DROP SEGMENT
- 移动Segment:ALTER TABLE MOVE SEGMENT,并支持设置段移动策略
- Segment迭代式查询:SEGMENT ITERATIVE QUERY,用于分页显示和数据采样
- Segment压缩:ALTER TABLE COMPACTION
- 显示Segment信息:SHOW SEGMENTS
Cloud Ready
Segment可感知位置,支持本地、云存储,混合云场景下使用
Segment Replication策略,用于缓存,云数据同步等
Bad Record的新功能
可在数据加载期间指定数据验证规则
新增以表格形式查看Bad Record,并能获得数据错误原因,使错误恢复更方便
更新的新功能
- 支持MERGE语法,可简化SCD type 2类型的更新操作
- 支持基于时间戳或版本号的查询(Time Travel)
- 支持流式表上的更新/删除。
计算框架集成
- 适配Spark Extension接口
- 支持Spark 2.4、3.0集成
- 支持Flink集成,使用SDK实现流式写入和读取
- 支持与更多Hadoop发行版的集成
- 支持与AI计算框架集成,如TensorFlow、pytorch、mxnet等
CarbonUI
UI支持管理和监控Segment
后端服务器可以充当Carbon的自动数据节点,触发Segment管理操作
云与本地之间的数据连接管理
杂项
- 将java兼容版本升级到java 1.8
- 支持预编译SQL模板,提升小表查询性能
- maven中央库中支持多个carbon jar,配套多个spark版本