目录
Apache CarbonData是一种新的大数据文件格式,使用先进的柱状存储、索引、压缩和编码技术来提高计算效率,这有助于在pb级的数据上以数量级的速度加快查询速度。
CarbonData特别设计了多种优化策略,如多级索引、压缩和编码技术,旨在提高包含filter、aggregation和counst distinct等分析查询的性能,用户期望在拥有较少节点的商用集群上获得对TB级别数据的亚秒级响应。
CarbonData具有以下优点:
独特的数据组织形式:以获得更快的查询性能及更少的数据检索成本
进一步的下推优化策略:与Spark进行深度集成,以改进Spark DataSource API和其他实验特性,从而确保计算在接近数据的地方执行,从而最大限度地减少数据的读、处理、转换和传输(shuffle)
多级索引:有效地修剪要扫描的文件和数据,从而减少I/O扫描和CPU处理
CarbonData拥有丰富的特性集来支持大数据分析中的各种用例。下表列出了CarbonData支持的主要特性。
DDL (Create, Alter,Drop,CTAS)
CarbonData提供自己的DDL来创建和管理CarbonData表。这些DDL符合Hive、Spark SQL格式,并支持利用CarbonData功能的附加属性和配置。
DML(Load,Insert)
CarbonData提供自己的DML来管理CarbonData表中的数据。它通过配置添加了许多自定义,以根据用户需求场景完全自定义行为。
Update and Delete
CarbonData支持大数据的更新和删除。CarbonData提供了类似于Hive的语法来支持CarbonData表上的IUD操作。
Segment Management
CarbonData拥有独特的Segment概念,可以有效地管理对CarbonData表的增量负载。Segment管理有助于轻松地控制表,执行简单的保留,还用于为正在执行的操作提供事务功能。
Partition
CarbonData支持两种分区。第一种分区类似于hive分区。第二种分区为CarbonData的分区方式,支持hash,list,range分区。
Compaction
CarbonData使用Segmen管理增量load。Compaction有助于压缩不断增长的片段数量,还有助于提升查询中的filter剪枝。
External Tables
CarbonData可以读取任何CarbonData文件并自动从文件中推断schema,并提供一个关系表视图来使用Spark或任何其他应用程序执行sql查询。
Pre-Aggregate
CarbonData有数据模型的概念,可以在查询时帮助裁剪数据,从而提高性能。预聚合表是一种可以按数量级提高查询性能的数据模型。CarbonData将自动预聚合增量数据并重新编写查询,以自动从最合适的预聚合表中获取数据,从而更快地提供查询。
Time Series
CarbonData建立了对时间顺序(年、月、日、时、分、秒)的理解。时间序列是一个预聚合表,它可以在增量加载期间自动将数据上卷到所需的级别,并从最合适的预聚合表提供查询。
Bloom filter
CarbonData支持bloom filter作为一种数据模型,可以快速有效地对数据进行裁剪,提高扫描速度和查询性能。
Lucene
Lucene很受欢迎,用于索引长文本数据。CarbonData提供了一个lucene datamap,因此可以使用lucene对文本列建立索引,并使用索引结果对查询期间要检索的数据进行有效的修剪。
MV (Materialized Views)
MV是一种预聚合表,它支持有效的查询重写和处理。CarbonData提供了可以重写查询以从任何表(包括非CarbonData表)获取数据的MV。典型的用例是将非carbondata事实表的聚合数据存储到carbondata中,并使用mv重写查询以从carbondata中获取数据。
Spark Streaming
CarbonData支持将数据以近乎实时的方式传送到CarbonData,并可立即进行查询。CarbonData提供了一种DSL来方便地创建源和接收表,而不需要用户编写自己的应用程序。
CarbonData writer
CarbonData支持使用SDK编写来自非spark应用程序的数据。用户可以使用SDK从自定义应用程序生成carbondata文件。典型的用例是将流应用程序插入kafka,并使用carbondata作为sink(目标)表进行存储。
CarbonData reader
CarbonData支持使用SDK从非spark应用程序读取数据。用户可以使用SDK从他们的应用程序中读取carbondata文件并进行定制处理。
S3
CarbonData可以向S3、OBS或任何云存储写入数据,以确保符合S3协议。CarbonData使用HDFS api写入云对象存储。
HDFS
CarbonData使用HDFS api从HDFS中读写数据。CarbonData可以利用位置信息,有效地建议spark在数据附近运行任务。
Alluxio
CarbonData还支持使用Alluxio进行读写。
CarbonData可以和Spark、Presto等大数据系统进行集成。