Kylin基本原理及概念

2019-01-24 10:20:25 浏览数 (1)

带你走进Apache Kylin的世界

Kylin版本:2.5.1

前言

膜拜大神,Kylin作为第一个由国人主导并贡献到Apache基金会的开源项目,堪称大数据分析界的“神兽”。所以我也是抓紧时间来学习Kylin,感受Kylin所带来的魅力。


一、Kylin简介

Kylin的出现就是为了解决大数据系统中TB级别数据的数据分析需求,它提供Hadoop/Spark之上的SQL查询接口及多维分析(OLAP)能力以支持超大规模数据,它能在亚秒内查询巨大的Hive表。其核心是预计算,计算结果存在HBase中。

作为大数据分析神器,它也需要站在巨人的肩膀上,依赖HDFSMapReduce/SparkHive/KafkaHBase等服务。

二、Kylin优势

Kylin的主要优势为以下几点:

  • 可扩展超快OLAP引擎:Kylin是为减少在Hadoop/Spark上百亿规模数据查询延迟而设计
  • Hadoop ANSI SQL 接口:KylinHadoop提供标准SQL支持大部分查询功能
  • 交互式查询能力:通过Kylin,用户可以与Hadoop数据进行亚秒级交互,在同样的数据集上提供比Hive更好的性能
  • 多维立方体(MOLAP Cube):用户能够在Kylin里为百亿以上数据集定义数据模型并构建立方体
  • BI工具无缝整合:Kylin提供与BI工具的整合能力,如TableauPowerBI/ExcelMSTRQlikSenseHueSuperSet
  • 其它特性:Job管理与监控;压缩与编码;增量更新;利用HBase Coprocessor;基于HyperLogLogDinstinc Count近似算法;友好的web界面以管理,监控和使用立方体;项目及表级别的访问控制安全;支持LDAPSSO

正是有以上那么多优势存在,也吸引了很多企业使用Kylin来分析数据,如图所示:

三、基本原理

Kylin的核心思想是预计算

理论基础是:以空间换时间。即多维分析可能用到的度量进行预计算,将计算好的结果保存成Cube并存储到HBase中,供查询时直接访问。

大致流程:将数据源(比如Hive)中的数据按照指定的维度和指标,由计算引擎Mapreduce离线计算出所有可能的查询结果(即Cube)存储到HBase中。HBase中每行记录的Rowkey各维度的值拼接而成,度量会保存在column family中。为了减少存储代价,这里会对维度和度量进行编码。查询阶段,利用HBase列存储的特性就可以保证Kylin有良好的快速响应和高并发。如下图所示:

四、架构

如上图所示,Kylin在架构设计上,可大体分为四个部分:数据源构建Cube的计算引擎存储引擎对外查询接口

其中数据源主要是HiveKafka;计算框架默认为MapReduce,也支持Spark;结果存储在HBase中;对外查询接口支持REST APIJDBCODBC

构建Cube的计算引擎模块如下:

1. REST Server

REST Server是一套面向应用程序开发的入口点,旨在实现针对Kylin平台的应用开发工作。此类应用程序可以提供查询、获取结果、触发cube构建任务、获取元数据以及获取用户权限等等。另外可以通过Restful接口实现SQL查询。

2. 查询引擎(Query Engine)

cube准备就绪后,查询引擎就能够获取并解析用户查询。它随后会与系统中的其他组件进行交互,从而向用户返回对应的结果。

3. Routing

负责将解析的SQL生成的执行计划转换成cube缓存的查询,cube是通过预计算缓存在HBase中,这部分查询可以在秒级甚至毫秒级完成,还有一些操作使用过的原始数据(存储在Hadoophdfs中通过hive查询),这部分查询延迟较高。

4. 元数据管理工具(Metadata Manager)

Kylin是一款元数据驱动型应用程序。元数据管理工具是一大关键性组件,用于对保存在Kylin当中的所有元数据进行管理,其中包括最为重要的cube元数据,其它全部组建的正常运作都需以元数据管理工具为基础,包括cube的定义、星状模型的定义、job的信息、job的输出信息、维度的directory信息等等,Kylin的元数据和cube都存储在HBase中。

5. 任务引擎(Cube Build Engine)

这套引擎的设计目的在于处理所有离线任务,其中包括shell脚本、Java API以及MapReduce任务等等。任务引擎对Kylin当中的全部任务加以管理与协调,从而确保每一项任务都能得到切实执行并解决期间出现的障碍。

6. 存储引擎(Storage Engine)

这套引擎负责管理底层存储,特别是cuboid,其以键值对的形式进行保存。存储引擎使用的是HBase,这是目前Hadoop生态系统当中最理想的键值系统使用方案。Kylin还能够通过扩展实现对其它键值系统的支持,例如Redis

五、基本概念

1. Table(表)

表定义在Hive中,是Data cube (数据立方体)的数据源,在build cube之前,Hive表必须同步在Kylin中。

2. Model(模型)

用来定义一个Fact Table(事实表)和多个Lookup Table(查找表),及所包含的dimension(维度)列、Messures(度量)列、partition(分区)列和date(日期)格式

3. Cube(立方体)

它定义了使用的模型、模型中的表的维度(dimensions)、度量(messures)、如何对段分区( segments partitions)、合并段(segments auto-merge)等的规则。

4. Cube Segments(立方体段)

它是立方体构建(build)后的数据载体,一个segment映射HBase中的一张表。Cube实例构建后,会产生一个新的Segment。一旦某个已经构建的Cube的原始数据发生变化,只需要刷新(fresh)变化的时间段所关联的segment即可。

5. dimension (维度)

维度可以简单理解为观察数据的角度,一般是一组离散的值。

6. Cardinality (维度的基数)

指的是该维度在数据集中出现的不同值的个数。比如“城市”是一个维度,如果该维度下有2000个不同的值,那么该维度的基数就是2000。通常一个维度的基数会从几十到几万个不等,个别维度如id的基数会超过百万甚至千万。

基数超过一百万的维度通常被称为超高基数维度(Ultra High Cardinality, UHC),需要引起设计者的注意。

友情提示:

Cube中所有维度的基数都可以体现出Cube的复杂度,如果一个Cube中有好几个超高基数维度,那么这个Cube膨胀的概率就会很高。在创建Cube前需要对所有维度的基数做一个了解,这样有助于设计合理的Cube

计算基数有多种途径,最简单的方法就是让Hive执行一个count distinctSQL查询。Kylin也提供了计算基数的方法,Kylin对基数的计算方法采用的是HyperLogLog的近似算法,与精确值略有误差,但作为参考值已经足够了。

7. Messures(度量)

度量就是被聚合的统计值,也是聚合运算的结果,一般指聚合函数(如:sumcountaverage等)。比如学生成绩、销售额等。

度量主要用于分析或者评估,比如对趋势的判断,对业绩或效果的评定等等。

8. Fact table(事实表)

事实表是指包含了大量不冗余数据的表,其列一般有两种,分别为包含事实数据的列,包含维度foreign key的列。

9. Lookup table(查看表)

包含了对事实表的某些列扩充说明的字段。

10. Dimenssion Table(维表)

Fact tableLookup table抽象出来的表,包含了多个相关的列,以提供对数据不同维度的观察,其中每列的值的数目称为Cardinatily

六、总结

本文主要介绍了Kylin原理架构、及基本概念。读完本文之后,应该就能了解Kylin定位及意义。更多内容可以去Kylin官网进行了解:传送门

后续还会有更深层次的Kylin系列博文,关注一下啦

0 人点赞