前言:数据仓库建设,初级的理解就是建表,将业务数据、日志数据、消息队列数据等,通过各种调度任务写入到表里供OLAP引擎使用。但要想建好数仓也是一个复杂、庞大的工程,比如要考虑:数据清洗、数据建模(星型模型、雪花模型、宽表模型、主题、维度、指标)、数据时效性(实时、T+1)、延迟容错、机器资源等。
1、OLTP和OLAP区别
-
OLAP(On-Line Analytical Processing)联机分析处理,也称为面向交易的处理过程,其基本特征是前台接收的用户数据可以立即传送到计算中心进行处理,并在很短的时间内给出处理结果,是对用户操作快速响应的方式之一。应用在数据仓库,使用对象是决策者。OLAP系统强调的是数据分析,响应速度要求没那么高。目前市面上主流的开源OLAP引擎包含不限于:Hive、ClickHouse、StarRocks、Presto、Kylin、Impala、Sparksql、Druid等
-
OLTP(On-Line Transaction Processing)联机事务处理,它使分析人员能够迅速、一致、交互地从各个方面观察信息,以达到深入理解数据的目的。它具有FASMI(Fast Analysis of Shared Multidimensional Information),即共享多维信息的快速分析的特征。主要应用是传统关系型数据库。OLTP系统强调的是内存效率,实时性比较高。Oracle、Redis、NySQL.
2、OLAP查询类型划分
-
即席查询: 通过手写sql完成一些临时的数据分析需求,这类sql形式多变、逻辑复杂,对查询时间没有严格要求
-
固化查询:指的是一些固化下来的取数、看数需求,通过数据产品的形式提供给用户,从而提高数据分析和运营的效率。这类的sql固定模式,对响应时间有较高要求。
3、按照架构划分的主流OLAP引擎:
-
MPP架构系统(Presto/Impala/SparkSQL/Drill等)。这种架构主要还是从查询引擎入手,使用分布式查询引擎,而不是使用hive+mapreduce架构,提高查询效率。
-
MapReduce:MapReduce是一种编程模型和分布式计算框架,用于处理大规模数据集。它由两个主要阶段组成:Map阶段和Reduce阶段。在Map阶段,数据被分割成多个小块,每个小块由独立的计算节点进行处理,并生成中间结果。在Reduce阶段,中间结果被合并和聚合,生成最终的结果。MapReduce适用于批量处理大规模数据,如日志分析、离线数据处理等。
-
预计算系统(Druid/Kylin等)则在入库时对数据进行预聚合,进一步牺牲灵活性换取性能,以实现对超大数据集的秒级响应。
-
搜索引擎架构的系统(es,solr等),在入库时将数据转换为倒排索引,采用Scatter-Gather计算模型,牺牲了灵活性换取很好的性能,在搜索类查询上能做到亚秒级响应。但是对于扫描聚合为主的查询,随着处理数据量的增加,响应时间也会退化到分钟级。
3.1、MapReduce
SparkSql, odps工作台就是典型的代表通过task schedule创建各类task,执行MR去处理数据,整合成需要展示的形态,。其特点就是能针对海量数据做处理,但是最大的问题就是慢。
慢的原因主要有两点 1. 任务的资源创建。 2.MR过程中中间结果在shuffle阶段的传输和存储非常耗时。
MR的适用场景是百亿级海量数据,对RT要求不敏感,分钟级以上的业务场景。
3.2、MPP[massive parallel processor]
MPP 是一种很常见的架构方式, 旨在利用了整个集群的计算能力。主要是架构形式是Master/Slave,把一次查询的计算和数据获取分布到各台slave上。
这里为了方便大家理解,举个很常见的例子来说明,如果按照对用户id分库分表的mysql集群来说,每次你查询的条件都是诸如age > 5这样的,每个分库遍历之后,由proxy聚合给到client,这样的形式也可以叫MPP架构。
整体MPP因为是SQL的查询方式,速度还是会比MR快上不少的。MPP的典型代表是GP, Impala, ES。
3.3、预聚合体系
预聚合体系非常像聚合计算统计,提前知道维度,然后预先根据维度去批量计算结果预存好数据,获得毫秒级的查询速度。
典型的代表是预定义cube的kylin 和 druid。 kylin的概念更好理解些,用的技术都是hadoop体系非常容易理解, 是通过hadoop小批量计算后把数据存在hbase里。
而druid的功能更丰富些,能接收消息队列数据,实时性更好些。
预聚合体系的场景是优点是毫秒级的数据RT,QPS比较高。缺点是不能不够动态,增添维度比较难,不能进行join。
4、MPP、Map Reduce、MPPDB区别
MPP (Massively Parallel Processing)、MapReduce 和 MPPDB(Massively Parallel Processing Database)是三个不同的概念和技术,三者定义如下:
-
MPP(Massively Parallel Processing):MPP是一种并行计算架构,用于处理大规模数据。MPP系统将数据分割成多个分片,每个分片由独立的计算节点处理。每个节点负责处理自己的数据分片,然后将结果合并。这种并行计算架构可以提高数据处理的速度和效率。
-
MapReduce:MapReduce是一种编程模型和分布式计算框架,用于处理大规模数据集。它由两个主要阶段组成:Map阶段和Reduce阶段。在Map阶段,数据被分割成多个小块,每个小块由独立的计算节点进行处理,并生成中间结果。在Reduce阶段,中间结果被合并和聚合,生成最终的结果。MapReduce适用于批量处理大规模数据,如日志分析、离线数据处理等。
-
MPPDB(Massively Parallel Processing Database):MPPDB是一种基于MPP架构的分布式数据库系统。它将数据分割成多个分片存储在不同的节点上,并利用并行计算能力进行查询和分析。MPPDB具有高度可扩展性和并行处理能力,可以处理大规模数据集,并提供高性能的查询和分析功能。
MPP是一种并行计算架构,而MapReduce是一种编程模型和分布式计算框架。
MapReduce适用于批量处理大规模数据,而MPPDB是一种分布式数据库系统,适用于实时查询和分析大规模数据。
MPPDB基于MPP架构,具有高度可扩展性和并行处理能力,而MapReduce可以在各种分布式计算框架中实现,如Hadoop。 MPPDB提供高性能的查询和分析功能,而MapReduce更适用于离线数据处理和复杂计算任务。
总的来说,MPP是一种并行计算架构,MapReduce是一种编程模型和分布式计算框架,而MPPDB是一种基于MPP架构的分布式数据库系统。它们在处理大规模数据和分布式计算方面有各自的原理和应用场景。
5、OLAP主流框架对比
OLAP核心的词汇是Analysis。既然是分析其实多的是类似COUNT,SUM,GroupBy这样的聚合操作。学术一点的是上钻,下钻,切片,切块这样的操作,这样的操作往往需要列式存储的支持才能达到更好的性能,所以往往很多OLAP引擎的底层存储就是列式的。
OLAP技术有很多类型,主要分为MPP(大规模并行)、视图预聚合、MapReduce(勉强算)几种类型。每一种类型都有其使用场景,针对业务需求能让我们更加了解对应的引擎。
5.1、Clickhouse
ClickHouse由俄罗斯第一大搜索引擎Yandex于2016年6月发布,开发语言为C++,是一个面向联机分析处理(OLAP)的开源的面向列式存储的DBMS,简称CK,与Hadoop、Spark这些巨无霸组件相比,ClickHouse很轻量级,查询性能非常好。目前国内社区火热,各个大厂纷纷跟进大规模使用。
ClickHouse从OLAP场景需求出发,定制开发了一套全新的高效列式存储引擎,并且实现了数据有序存储、主键索引、稀疏索引、数据Sharding、向量执行、剪枝优化、主备复制等丰富功能。以上功能共同为ClickHouse极速的分析性能奠定了基础。
5.2、Presto
Presto 是 Facebook 推出分布式SQL交互式查询引擎,采用MPP架构,完全基于内存的并行计算。Presto比Hive快的原因就在于不在落盘,而是全内存操作。Presto在支持的SQL计算上更加通用,更适合ad-hoc查询场景,然而这些通用系统往往比专用系统更难做性能优化,所以不太适合做对查询QPS(参考值QPS > 1000)、延迟要求比较高(参考值search latency < 500ms)的在线服务,更适合做公司内部的查询服务和加速Hive查询的服务。
5.3、Doris/StarRocks
Doris是由百度开源的一款MPP数据库,实现了MySQL协议,集成Google Mesa 和Apache Impala 的技术。DorisDB是基于 Apache Doris 做的闭源商业化产品,后该产品又基于Elastic License 2.0开源并更名为StarRocks。
5.4、Spark SQL
Spark是UC Berkeley AMP lab开源的类MapReduce的通用的并行计算框架。SparkSQL 是 Spark 处理结构化数据的模块。本质上也是基于 DAG (有向无环图,Directed Acyclic Graph的缩写,常用于建模) 的 MPP。
5.5、Kylin
Kylin 是2014年由 eBay 中国研发中心开源的OLAP引擎,提供 Hadoop/Spark 之上的 SQL 查询接口及多维分析能力以支持超大规模数据,它能在亚秒内查询巨大的Hive表。其核心技术点在于预计算和Cube(立方体模型)的设置:首先, 对需要分析的数据进行建模,框定需要分析的维度字段;然后通过预处理的形式,对各种维度进行组合并事先聚合;最后,将聚合结果以某种索引或者缓存的形式保存起来(通常只保留聚合后的结果,不存储明细数据)。这样一来,在随后的查询过程中,就可以直接利用结果返回数据。
5.6、Druid
Druid是由广告公司 MetaMarkets 于2012年开源的实时大数据分析引擎。Druid 作为MOLAP引擎,也是对数据进行预聚合。只不过预聚合的方式与Kylin不同,Kylin是Cube化,Druid的预聚合方式只是全维度进行Group-by,相当于是Kylin Cube 的 base cuboid。Druid 支持低延时的数据摄取,灵活的数据探索分析,高性能的数据聚合,简便的水平扩展。Druid支持更大的数据规模,具备一定的预聚合能力,通过倒排索引和位图索引进一步优化查询性能,在广告分析场景、监控报警等时序类应用均有广泛使用。
参考链接:
常见开源OLAP技术架构对比 - 知乎
OLAP引擎对比分析 - 知乎
大数据四大阵营之OLTP阵营(上) - 知乎