3.2 Kylin体系架构
Kylin的系统架构如图3-2所示。
图3-2
下面我们对Kylin的系统架构中的各个模块进行介绍。
模块一:Hadoop/Hive(图3-2的最左下部分)
Kylin是一个MOLAP系统,其将Hive中的数据进行预计算,利用Hadoop的MapReduce分布式计算框架来实现。
这一块也提到了Kylin获取的表是星型模型结构的,也就是目前建模时仅支持一张事实表,多张维表。如果你的业务需求比较复杂,那么就要考虑在Hive中进行进一步处理,比如生成一张大的宽表或者采用view代替。
模块二:HBase(图3-2的最右下部分)
HBase是Kylin中用来存储OLAP分析的Cube数据的地方,实现多维数据集的交互式查询。
模块三:Kylin的核心模块(图3-2的中间部分),包含如下几个部分:
(1)REST Server
提供Restful接口,例如我们可以通过此接口来创建Cube、构建Cube、刷新Cube、合并Cube等Cube相关操作,Kylin的Projects、Tables等元数据管理,用户访问权限控制,系统参数动态配置或修改等。
另外还有一点也很重要,就是我们可以通过Restful接口实现SQL的查询,不论你是通过第三方程序,还是Kylin的Web界面使用。
(2)Query Engine
目前Kylin使用开源的Calcite框架来实现SQL解析,可以理解为SQL引擎层。其实采用Calcite框架还有很多产品,比如Apache顶级项目Drill,它的SQL Parser部分采用的也是Apache Calcite, Calcite实现的功能是提供了JDBC interface,接收用户的查询请求,然后将SQL Query语句转换成为SQL语法树,也就是逻辑计划。
(3)Routing
负责将解析SQL生成的执行计划转换成cube缓存的查询,cube是通过预计算缓存在HBase中,这部分查询是可以在秒级甚至毫秒级完成,而还有一些操作使用过查询原始数据(存储在Hadoop的HDFS上通过Hive查询),这部分查询的延迟比较高。
(4)Metadata
Kylin中有大量的元数据信息,包括cube的定义、星型模型的定义、Job和执行Job的输出信息、模型的维度信息等等。Kylin的元数据和cube都存储在HBase中,存储的格式是json字符串。
(5)Cube Build Engine
这个模块内容非常重要,它也是所有模块的基础,它主要负责Kylin预计算中创建cube。创建的过程是首先通过Hive读取原始数据,然后通过一些MapReduce或Spark计算生成Htable,最后将数据load到HBase表中。
模块四:Kylin提供的接口(图3-2的中间正上面)
这部分模块主要是提供了Restful API和JDBC/ODBC接口,方便第三方Web APP产品和基于SQL的BI工具的接入,比如Apache Zeppelin、Tableau、Power BI等。
Kylin提供的JDBC驱动的classname为org.apache.kylin.jdbc.Driver,使用的URL的前缀jdbc:kylin:,使用JDBC接口的查询走的流程和使用RESTFul接口查询走的内部流程是相同的。这类接口也使得Kylin很好地兼容tebleau甚至mondrian。