链家大数据多维分析引擎实践

2017-09-08 邓钫元 高可用架构 高可用架构

前言:大数据背景下,传统关系型多维分析 ROLAP 引擎遇到极大挑战,因而链家转向基于 Hadoop 生态的 MOLAP(Kylin)及 HOLAP (多引擎)。在由七牛云和链家联合主办的架构师实践日北京站中,链家大数据集群架构组负责人邓钫元进行演讲,分享了链家在多维分析引擎方面的一些实践经验,主要从 OLAP 的背景和简介、链家多维分析架构演进和展望、OLAP 平台链路优化这三部分来介绍。


邓钫元,链家网大数据资深研发工程师。2015 年开始负责链家大数据集群建设,专注于 Hadoop 生态组的定制开发及应用,深入 Hadoop/HBase 等源码,成为 contributor 回馈社区。擅长底层性能调优,打造公司级计算存储平台。


一、OLAP 的背景和简介


1. OLAP vs OLTP


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。


图1


4. MOLAP


第二种 MOLAP,刚才提到 MOLAP 主要是要定义一个模型,比如说图2样例里面定义了三个维度:Time,Web page,Action。从这三个维度把所有的组合提前预计算好,存在一个存储引擎中,需要的时候里面取出来做一下聚合就可以,所以它的原始数据支持非常大,查询速度,因为直接算好了,可以很快返回。它的缺点就是因为聚合了以后,就查不到明细数据。它的灵活性稍微差一点,因为需要预先去定义维度,还有指标。所以说是需要能够知道查询的模式,才能用这个 MOLAP。


图2    


二、链家多维分析架构演进和展望


1. 早期分析数据实现

刚才吕毅已经讲到,我们刚开始做大数据的时候,Hadoop 组建基本上都是基于开源的。我们会从日志、Kafka 去导数据,MySQL 数据会用 Sqoop 同步到 Hadoop 中。当时是用一个开源的调度引擎 Ooize,我们根据业务需求去建表,然后把数据导到 MySQL 中,因为要做呈现,必须要在一个比较快的返回的数据库中。所以放在 MySQL。


它的缺点是什么?当它的数据量越来越大,MySQL 做存储,它的扩展性是非常不好的。数据量大以后,第二个问题速度会比较慢。第三个,面临分析的维度非常多,每个维度的分析,都要一个数据开发做需求,平均做一个需求时间可能要两周。

图3

2. 技术选型


能不能用一些 OLAP 引擎来简化操作?我们总结了对 OLAP 引擎的一些需求。


第一,响应要快。因为业务分析人员等不了太久。需要一定并发。最好