前言:大数据背景下,传统关系型多维分析 ROLAP 引擎遇到极大挑战,因而链家转向基于 Hadoop 生态的 MOLAP(Kylin)及 HOLAP (多引擎)。在由七牛云和链家联合主办的架构师实践日北京站中,链家大数据集群架构组负责人邓钫元进行演讲,分享了链家在多维分析引擎方面的一些实践经验,主要从 OLAP 的背景和简介、链家多维分析架构演进和展望、OLAP 平台链路优化这三部分来介绍。
邓钫元,链家网大数据资深研发工程师。2015 年开始负责链家大数据集群建设,专注于 Hadoop 生态组的定制开发及应用,深入 Hadoop/HBase 等源码,成为 contributor 回馈社区。擅长底层性能调优,打造公司级计算存储平台。
一、OLAP 的背景和简介
OLAP 翻译成中文叫联机分析处理,OLTP 叫联机事务处理。OLTP 它的核心是事务,实际上就是我们常见的数据库。我们业务数据库就是面向于事务。它的并发量会比较高,但是操作的数据量会比较小。它是实时更新的。数据库的设计会按照 3NF 范式,更高的话可能会按照 BC 范式之类的来做。而 OLAP 的核心是分析,面向应用是分析决策,需要分析的数据级会非常大,可能 TB,甚至 PB 都会有。它的数据更新会稍微慢一些,它的设计一般是反范式的,因为面向分析。常见的是雪花模型和星型模型。
刚才说的比较空洞,实际上 OLAP 是什么呢?非常简单,就是一个 SQL,这里按照两个维度,一个 returnflag,一个 orderstatus 来做 Group By,然后做一下 Sum,Group By 这段就叫维度,From 这段叫做指标,非常简单。
2. OLAP 引擎分类
OLAP 引擎的一些常见分类大概有这几种。
第一种叫 ROLAP,叫关系型 OLAP,它的特点就是它是基于关系性模型,计算的时候,根据原始数据去做聚合运算。常见的实现,小数据量可以利用 MySQL、Oracle 这种传统数据库,而大数据量可以利用 Spark SQL、Presto 这些项目。
第二种类型叫 MOLAP,叫多维 OLAP,它的特点就是它会基于一个预定义的模型,我需要知道,要根据什么维度,要去算哪些指标,我提前就把这些结果弄好,存储在引擎上。当查询的时候,根据结果简单地做一做汇总就可以得出来。今天主要会讲到 Kylin 引擎,蚂蜂窝的汪老师后续会讲到 Druid 引擎。大家也可以做一下对比。
3. HOLAP
最后一种叫 HOLAP,叫混合 OLAP,这个就非常简单了,就是两个杂交一下。根据业务场景路由不同的引擎。 图一这是简单的 ROLAP 模型,具体操作流程刚才已经提到了,它的优势就是,它其实就是个数据库,所以任何的 SQL 都可以在里面执行。数据是没有冗余的。缺点就是数据量很大的时候,计算速度会下降很多,所以并发会比较差。它的场景就是不知道要查什么数据,灵活性非常高时,一般会选 ROLAP。
4. MOLAP
第二种 MOLAP,刚才提到 MOLAP 主要是要定义一个模型,比如说图2样例里面定义了三个维度:Time,Web page,Action。从这三个维度把所有的组合提前预计算好,存在一个存储引擎中,需要的时候里面取出来做一下聚合就可以,所以它的原始数据支持非常大,查询速度,因为直接算好了,可以很快返回。它的缺点就是因为聚合了以后,就查不到明细数据。它的灵活性稍微差一点,因为需要预先去定义维度,还有指标。所以说是需要能够知道查询的模式,才能用这个 MOLAP。
刚才吕毅已经讲到,我们刚开始做大数据的时候,Hadoop 组建基本上都是基于开源的。我们会从日志、Kafka 去导数据,MySQL 数据会用 Sqoop 同步到 Hadoop 中。当时是用一个开源的调度引擎 Ooize,我们根据业务需求去建表,然后把数据导到 MySQL 中,因为要做呈现,必须要在一个比较快的返回的数据库中。所以放在 MySQL。
它的缺点是什么?当它的数据量越来越大,MySQL 做存储,它的扩展性是非常不好的。数据量大以后,第二个问题速度会比较慢。第三个,面临分析的维度非常多,每个维度的分析,都要一个数据开发做需求,平均做一个需求时间可能要两周。
2. 技术选型
能不能用一些 OLAP 引擎来简化操作?我们总结了对 OLAP 引擎的一些需求。
第一,响应要快。因为业务分析人员等不了太久。需要一定并发。最好