内容简介:长按下方二维码,关注更多精彩内容
“ 带你走进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
并存储到 HBase
中,供查询时直接访问。
大致流程:将数据源(比如 Hive
)中的数据按照指定的维度和指标,由计算引擎 Mapreduce
离线计算出所有可能的查询结果(即 Cube
)存储到 HBase
中。 HBase
中每行记录的 Rowkey
由 各维度的值拼接 而成,度量会保存在 column family
中。为了减少存储代价,这里会对维度和度量进行编码。查询阶段,利用 HBase
列存储的特性就可以保证 Kylin
有良好的快速响应和高并发。如下图所示:
四、架构
如上图所示, 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
的近似算法,与精确值略有误差,但作为参考值已经足够了。
7. Messures(度量)
度量就是被聚合的统计值,也是聚合运算的结果,一般指聚合函数(如: sum
、 count
、 average
等)。比如学生成绩、销售额等。
度量主要用于分析或者评估,比如对趋势的判断,对业绩或效果的评定等等。
8. Fact table(事实表)
事实表是指包含了大量不冗余数据的表,其列一般有两种,分别为包含事实数据的列,包含维度 foreign key
的列。
9. Lookup table(查看表)
包含了对事实表的某些列扩充说明的字段。
10. Dimenssion Table(维表)
由 Fact table
和 Lookup table
抽象出来的表,包含了多个相关的列,以提供对数据不同维度的观察,其中每列的值的数目称为 Cardinatily
。
六、总结
本文主要介绍了 Kylin
的 原理 、 架构 、及 基本概念 。读完本文之后,应该就能了解 Kylin
的 定位及意义 。更多内容可以去 Kylin
官网进行了解:http://kylin.apache.org/cn/
后续还会有 更深层次的 Kylin
系列博文 ,关注一下啦:smile:
长按下方二维码,关注更多精彩内容
如果感觉本文对您有帮助,请点击右下角‘ 好看 ’支持一下,您的支持是我坚持写作最大的动力,谢谢!
如果您有 疑问或想法 ,可点击 阅读全文 进行评论,作者会 第一时间 回复。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- Webpack 原理(三):核心概念
- zookeeper工作原理以及基础概念
- 网络爬虫概念,与工作原理的介绍
- Docker 的镜像基本原理和概念
- Knative 系列(一):基本概念和原理解读
- 图解git原理的几个关键概念
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。