【CDN+】 Kylin 的初步认识与理解
前言
项目中用到了Kylin框架来处理数据,那么作为项目成员需要了解哪些关于Kylin的知识呢,本文就Kylin得基本概念和原理进行简述。
Kylin基本概念
首先想到的学习路径是Kylin官网: http://kylin.apache.org/cn/
给出的概念是: Apache Kylin™是一个开源的分布式分析引擎,提供Hadoop/Spark之上的SQL查询接口及多维分析(OLAP)能力以支持超大规模数据,最初由eBay Inc. 开发并贡献至开源社区。它能在亚秒内查询巨大的Hive表。
由Kylin的概念可以得出:
1. Kylin是一个国产的处理hadoop、spark等超大规模数据的一种分布式引擎
2. Kylin 是基于OLAP的
3. Kylin的速度非常快,亚秒级别可以在超大规模数据完成数据查询操作(亚秒也就是比1秒要慢一点点,大约1.2秒这样)
什么是OLAP?
OLAP: On-Line Analytic Processing 联机分析处理,分为:
MOLAP : Multi-Dimensional OLAP kylin是一个MOLAP系统,通过预计算的方式缓存了所有需要查询的的数据结果,需要大量的存储空间(原数据量的10+倍)。
ROLAP: Relational OLAP Mondrian是一个ROLAP系统,所有的查询可以通过实时的数据库查询完成,而不会有任何的预计算,大大节约了存储空间的要求(但是会有查询结果的缓存,目前是缓存在程序内存中,很容易导致OOM
HOLAP: Hybrid OLAP 混合型的OLAP。
为什么Kylin 能够实现超大数据的亚秒级查询?
官网给出的解答是:
Apache Kylin™令使用者仅需三步,即可实现超大数据集上的亚秒级查询。
1 定义数据集上的一个星形或雪花形模型
2 在定义的数据表上构建cube
3 使用标准SQL通过ODBC、JDBC或RESTFUL API进行查询,仅需亚秒级响应时间即可获得查询结果
顺藤摸瓜,那么什么是Kylin 星形、雪花模型呢?
星型模型:
有一张事实表、以及零个或多个维度表;事实表与维度表通过 主键/外键 相关联,维度表之间没有关联,就像很多星星围绕在一个恒星周围,顾命名为星型模型。

雪花模型:
如果将星型模型中某些维度的表再做规范,抽取成更细的维度表,然后让维度表之间也进行关联,那么这种模型成为雪花模型(雪花模型可以通过一定的转换,变为星型模型)

如何构建Cube

Cube:由维度构建出来的多维空间,包含了所有要分析的基础数据,所有的聚合数据操作都在立方体上进行
Dimension:观察数据的角度。一般是一组离散的值,比如:
- 时间维度上的每一个独立的日期
- 商品维度上的每一件独立的商品
Measure:即聚合计算的结果,一般是连续的值,比如:
- 销售额,销售均价
- 销售商品的总件数
事实表:是指存储有事实记录(明细数据)的表,如系统日志、销售记录等;事实表的记录在不断地动态增长,数据量大
维度表(维表):保存了维度值,可以跟事实表做关联。常见的维度表如:
- 日期表
- 地点表
- 分类表
Cuboid:对于每一种维度的组合,将度量做聚合运算,然后将运算的结果保存为一个物化视图,称为 Cuboid (即为上图的最小立方体单元,这也是cube的基石)
思考:
一个 Cube 有(M+N)个维度,那么会有 2的(M+N)次方 个 Cuboid ---------注意Kylin里面有很多方法可以减少无效的Cuboid, 例如某个表里面包含了
国家--省--市--县城 ,那么其他的组合都是错误的,这类可以直接排除。
Kylin查询为什么快,就是因为这个Cuboid包含了用户想要查询的任何情况,计算复杂度是O(1)
{
"name": "test_cube",
"model_name": "test_model", // 使用名为 model_test 的数据模型
"description": "",
"null_string": null,
"dimensions": [ // 维度,可以来自事实表或维度表
{
"name": "PART_DT",
"table": "KYLIN_SALES",
"column": "PART_DT",
"derived": null
},
{
"name": "_MAX_",
"function": {
"expression": "MAX",
"parameter": {
"type": "column",
"value": "KYLIN_SALES.PRICE"
},
"returntype": "decimal(19,4)"
}
}
],
"dictionaries": [],
"rowkey": { // rowkey 配置,主要关注维度列在 rowkey 中的位置(谁先谁后)
"rowkey_columns": [
{
"column": "KYLIN_SALES.PART_DT",
"encoding": "date",
"encoding_version": 1,
"isShardBy": false
},
{
"column": "KYLIN_CAL_DT.CAL_DT",
"encoding": "date",
"encoding_version": 1,
"isShardBy": false
}
]
},
"hbase_mapping": {
"column_family": [
{
"name": "F1",
"columns": [
{
"qualifier": "M",
"measure_refs": [
"_COUNT_",
"_SUM_",
"_MAX_"
]
}
]
}
]
},
"aggregation_groups": [ // aggregation groups 配置,共两个 aggregation groups
{
"includes": [
"KYLIN_SALES.PART_DT",
"KYLIN_SALES.LEAF_CATEG_ID",
"KYLIN_SALES.LSTG_SITE_ID",
"KYLIN_SALES.SLR_SEGMENT_CD",
"KYLIN_SALES.OPS_USER_ID",
"KYLIN_CAL_DT.CAL_DT"
],
"select_rule": {
"hierarchy_dims": [],
"mandatory_dims": [],
"joint_dims": []
}
}
],
"partition_date_start": 0, // Cube 日期/时间 分区起始值
"partition_date_end": 3153600000000, // Cube 日期/时间 分区结束值
"auto_merge_time_ranges": [ // 自动合并小的 segments 到中等甚至更大的 segment
604800000,
2419200000
],
"retention_range": 0, // 不删除旧的 Cube Segment
"engine_type": 4, // 构建 Cube 的引擎为 Spark
"storage_type": 2, // 使用 Hbase 存储 Cube
"override_kylin_properties": {},
"cuboid_black_list": []
}
Kylin 的总体架构与特性

4. Hadoop ANSI SQL 接口:
- Job管理与监控
- 压缩与编码
- 增量更新
- 利用HBase Coprocessor
- 基于HyperLogLog的Dinstinc Count近似算法
- 友好的web界面以管理,监控和使用立方体
- 项目及表级别的访问控制安全
- 支持LDAP、SSO
【CDN+】 Kylin 的初步认识与理解的更多相关文章
- ASP.NET底层与各个组件的初步认识与理解 (转载)
ASP.NET底层的初步认识与理解 最近在国外的网站乱走一通,发现一些比较好的文章,收集整理加于自己的理解,作为笔记形式记录下来,让以后自己有个回忆. ASP.NET是一个非常强大的构建Web应用 ...
- Hive初步认识,理解Hive(一)
Hive初步认识,理解Hive(一) 用了有一段时间的Hive了,之前一直以为hive是个数据库,类似Mysql.Oracle等数据库一样,其实不然. Hive是实现Hadoop 的MapReduce ...
- 对vue源码的初步认识和理解
根据vue的官网介绍,可以得知vue是一个mvvm框架,且是响应式的.为了更深入了理解其内涵,本人以及理解实现了一个简单的mvvm学习的demo.下面分享给大家,欢迎大家一起讨论. 一.mvvm至少包 ...
- WebService 初步入门的理解
先说明 我不是高手 我是菜鸟 也在不断学习的过程 记录下来这些是让自己总结的学习 毕竟我做的时候也是摸索前进的 我没有深入 我是入门摸索 前两天的时候做一个微信的开发的 要用到我们公司微信服务号 ...
- Kylin 初入门 | 从下载安装到体验查询
本文旨在为 Kylin 新手用户提供一份从下载安装到体验亚秒级查询的完整流程.文章分为两个部分,分别介绍了有 Hadoop 环境(基于 Hadoop 环境的安装)和没有 Hadoop 环境(从 Doc ...
- ViewState与Session [转]
昨天偶然看到网上有人讨论究竟是该用viewstate还是session来保存信息. 忽然觉得有必要去深入的研究一下这两个东东了,我们先来看深入分析一下viewstate, 为了分析的相对完整性,先从简 ...
- Objective C 快速入门学习一
Objective-C程序设计 1. 直接用Xcode作为IDE,舍弃gcc编译方面的学习.2. 入门例子:Eg:打印Hello World 控制台程序 #import<Foundation/F ...
- ViewState与Session
在asp时代, 大家都知道一个html控件的值,比如input 控件值,当我们把表单提交到服务器后, 页面再刷新回来的时候, input里面的数据已经被清空. 这是因为web的无状态性导致的, 服务端 ...
- 5 kafka整合storm
本博文的主要内容有 .kafka整合storm .storm-kafka工程 .storm + kafka的具体应用场景有哪些? 要想kafka整合storm,则必须要把这个storm-kafk ...
随机推荐
- HDFS数据流——写数据流程
剖析HDFS文件写入 假设文件ss.avi共200m,其写入HDFS指定路径/user/atguigu/ss.avi流程如下: 1)客户端向namenode请求上传文件到指定路径,namenode通过 ...
- Java高级数据类型转换:包装类、String字符串、Date类等与其他类型转换
1.包装类过渡类型转换 一般情况下,我们首先声明一个变量,然后生成一个对应的包装类,就可以利用包装类的各种方法进行类型转换了.例如: 当希望把float型转换为double型时: float f1=1 ...
- Codeforces Manthan, Codefest 19 (open for everyone, rated, Div. 1 + Div. 2)
传送门 A. XORinacci 手玩三四项发现序列就是 $a,b,a\ xor\ b,a,b,...$,直接输出即可 #include<iostream> #include<cst ...
- js数组中的引用类型
我们看一下这个例子: let a={tile:'深复制'}; let b=a; a.title='浅复制'; 那么我们会获得两个对象,一个a,一个b,a的title是浅复制,b的title是深复制.但 ...
- 解决 vue-cli构建项目自动打开浏览器问题
1.打开项目下的config/index.js 2.找到module.exports的 dev下的 autoOpenBrowser ,将 false 改成 true 3.控制台输入:npm run d ...
- unity2017 光照与渲染(一)
光照&渲染(基于unity2017.2.0) Custom Skybox 天空盒 最丰富的环境光 a. TextureShape 改成 Cube. b. 把图片直接丢给天空,就会自动生成材质. ...
- tf.clip_by_global_norm
首先明白这个事干嘛的,在我们做求导的时候,会遇到一种情况,求导函数突然变得特别陡峭,是不是意味着下一步的进行会远远高于正常值,这个函数的意义在于,在突然变得陡峭的求导函数中,加上一些判定,如果过于陡峭 ...
- bzoj3809 Gty的二逼妹子序列 & bzoj3236 [Ahoi2013]作业 莫队+分块
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=3809 https://lydsy.com/JudgeOnline/problem.php?id ...
- overflow hidden 遇上absolute失效
原文地址 背景 这几天开发的时候遇到了个问题,如图1. 写了个demo 由于页面并没有进行整体缩放,导致在小屏幕手机上显示会有异常.PM要求能够显示最后一个完整的标签. 当在iPhone5手机上查看页 ...
- Python获取exe文件版本
import time, datetime, re, subprocess, sys, os, win32net, win32api, win32con, win32netcon, win32secu ...