kylin的cube的原理

Kylin基本原理及概念
2019-01-24阅读 1K0
“带你走进Apache Kylin的世界”

Kylin版本:2.5.1

前言

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

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

作为大数据分析神器,它也需要站在巨人的肩膀上,依赖HDFS、MapReduce/Spark、Hive/Kafka、HBase等服务。

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

可扩展超快OLAP引擎:Kylin是为减少在Hadoop/Spark上百亿规模数据查询延迟而设计
Hadoop ANSI SQL 接口:Kylin为Hadoop提供标准SQL支持大部分查询功能
交互式查询能力:通过Kylin,用户可以与Hadoop数据进行亚秒级交互,在同样的数据集上提供比Hive更好的性能
多维立方体(MOLAP Cube):用户能够在Kylin里为百亿以上数据集定义数据模型并构建立方体
与BI工具无缝整合:Kylin提供与BI工具的整合能力,如Tableau,PowerBI/Excel,MSTR,QlikSense,Hue和SuperSet
其它特性:Job管理与监控;压缩与编码;增量更新;利用HBase Coprocessor;基于HyperLogLog的Dinstinc Count近似算法;友好的web界面以管理,监控和使用立方体;项目及表级别的访问控制安全;支持LDAP、SSO
正是有以上那么多的优势存在,也吸引了很多企业使用Kylin来分析数据,如图所示:
kylin的cube的原理_第1张图片

三、基本原理
Kylin的核心思想是预计算。

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

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

kylin的cube的原理_第2张图片
四、架构
kylin的cube的原理_第3张图片
kylin的cube的原理_第4张图片
如上图所示,Kylin在架构设计上,可大体分为四个部分:数据源,构建Cube的计算引擎,存储引擎,对外查询接口。

其中数据源主要是Hive、Kafka;计算框架默认为MapReduce,也支持Spark;结果存储在HBase中;对外查询接口支持REST API、JDBC、ODBC。

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

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

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

  3. Routing
    负责将解析的SQL生成的执行计划转换成cube缓存的查询,cube是通过预计算缓存在HBase中,这部分查询可以在秒级甚至毫秒级完成,还有一些操作使用过的原始数据(存储在Hadoop的hdfs中通过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 distinct的SQL查询。Kylin也提供了计算基数的方法,Kylin对基数的计算方法采用的是HyperLogLog的近似算法,与精确值略有误差,但作为参考值已经足够了。

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

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

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

  2. Lookup table(查看表)
    包含了对事实表的某些列扩充说明的字段。

  3. Dimenssion Table(维表)
    由Fact table和Lookup table抽象出来的表,包含了多个相关的列,以提供对数据不同维度的观察,其中每列的值的数目称为Cardinatily。

六、总结

你可能感兴趣的:(数据库)