作者: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版本
  • No labels