没有合适的资源?快使用搜索试试~ 我知道了~
Kylin入门学习资料1
资源详情
资源评论
资源推荐
KYLIN 学习资料
1、关于 KYLIN
官网地址:http://kylin.apache.org/
本质:拿空间换时间---《pre-build》
通过预计算把用户需要查询的维度以及他们所对应的考量的值,存储在多维空间里。
当用户查询某几个维度的时候,通过这些维度条件去定位到预计算的向量空间,通过
再聚合处理,快速返回最终结果给用户
Apache Kylin™ 是一个开源的分布式分析引擎,提供 Apache Hadoop 之上的 SQL 查询接
口及多维分析(OLAP)能力以支持超大规模数据。Apache Kylin™首创使用多维立方体预计
算处理大数据查询,在 Hadoop 平台上提供亚秒级查询千亿记录的能力,提供标准 SQL 接口,
查询性能比 Hive 快 100~1000 倍。其独创的稀疏立方体、压缩存储、微批处理构建等技术,
很好的解决了大数据建立索引的指数级膨胀的难题,从而在查询速度上大大领先于其他基
于 MPP(大规模并行计算)等技术的解决方案,可以很好的满足百亿规模以上超大数据集提供
快速的、高并发标准 SQL 查询的业务需求,并通过其 ODBC、JDBC 驱动及 REST API 等与 BI
工具,前端可视化技术等无缝整合。Apache Kylin™也是第一个由中国人主导的 Apache 顶级
项目,于 2015 年 11 月正式毕业成为 Apache 顶级项目。2015 年 9 月,Apache Kylin 与 Spark、
HBase、Kafka 等并列荣膺 InfoWorld 2015 年 Bossie 最佳开源大数据工具奖。这也是国人
项目第一次获得该国际大奖。Apache Kylin™在大数据分析领域应用广泛,获得了快速的推
广。国内外一线的互联网,金融,电信等公司越来越多地采用 Apache Kylin™作为其大数据
分析平台。
2、KYLIN 介绍
KYLIN 是 Ebay 开发的一套 OLAP 系统,与 Mondrian 不同的是,它是一个 MOLAP 系统,
主要用于支持大数据生态圈的数据分析业务,它主要是通过预计算的方式将用户设定的多维
立方体缓存到 HBase 中(目前还仅支持 hbase),这段时间对 mondrian 和 kylin 都进行了
使用,发现这两个系统是时间和空间的一个权衡吧,mondrian 是一个 ROLAP 系统,所有的
查询可以通过实时的数据库查询完成,而不会有任何的预计算,大大节约了存储空间的要求
(但是会有查询结果的缓存,目前是缓存在程序内存中,很容易导致 OOM),而 kylin 是一
个 MOLAP 系统,通过预计算的方式缓存了所有需要查询的的数据结果,需要大量的存储空间
(原数据量的 10+倍)。一般我们要分析的数据可能存储在关系数据库(mysql、oracle,
一般是程序内部写入的一些业务数据,可能存在分表甚至分库的需求)、HDFS 上数据(结
构化数据,一般是业务的日志信息,通过 hive 查询)、文本文件、excel 等。kylin 主要是
对 hive 中的数据进行预计算,利用 hadoop 的 mapreduce 框架实现。而 mondrian 理论上可
以支持任意的提供 SQL 接口数据,由于关系数据库一般会存在索引,所以即使使用 mondrian
去查询性能还是可以接受的,当前我们使用的 oracle 数据库,千万条级别的记录,查询可
以在分钟级别完成,但是对于 hive、这样的数据源查询就太慢了,慢得不可以接受。
2.1、KYLIN 系统架构
kylin 由以下几部分组成:
· REST Server:提供一些 restful 接口,例如创建 cube、构建 cube、刷
新 cube、合并 cube 等 cube 的操作,project、table、cube 等元数据管理、用
户访问权限、系统配置动态修改等。除此之外还可以通过该接口实现 SQL 的查询,
这些接口一方面可以通过第三方程序的调用,另一方也被 kylin 的 web 界面使用。
· jdbc/odbc 接口:kylin 提供了 jdbc 的驱动,驱动的 classname 为
org.apache.kylin.jdbc.Driver,使用的 url 的前缀 jdbc:kylin:,使用 jdbc
接口的查询走的流程和使用 RESTFul 接口查询走的内部流程是相同的。这类接口
也使得 kylin 很好的兼容 tebleau(可视化分析工具)甚至 mondrian(一个用
Java 写成的 OLAP(在线分析性处理)引)。
· Query 引擎:kylin 使用一个开源的 Calcite(Hadoop 中新型大数据查询
引擎)框架实现 SQL 的解析,相当于 SQL 引擎层。
· Routing:该模块负责将解析 SQL 生成的执行计划转换成 cube 缓存的查
询,cube 是通过预计算缓存在 hbase 中,这部分查询是可以再秒级甚至毫秒级
完成,而还有一些操作使用过查询原始数据(存储在 hadoop 上通过 hive 上查询),
这部分查询的延迟比较高。
· Metadata:kylin 中有大量的元数据信息,包括 cube 的定义,星状模型
的定义、job 的信息、job 的输出信息、维度的 directory 信息等等,元数据和
cube 都存储在 hbase 中,存储的格式是 json 字符串,除此之外,还可以选择将
元数据存储在本地文件系统。
· Cube 构建引擎:这个模块是所有模块的基础,它负责预计算创建 cube,
创建的过程是通过 hive 读取原始数据然后通过一些 mapreduce 计算生成 Htable
然后 load 到 hbase 中。
2.2、KYLIN 相关名词解释
Here are some domain terms we are using in Apache Kylin, please check
them for your reference. They are basic knowledge of Apache Kylin which
also will help to well understand such concerpt, term, knowledge, theory
and others about Data Warehouse, Business Intelligence for analycits.
- Data Warehouse: a data warehouse (DW or DWH), also known as an
enterprise data warehouse (EDW), is a system used for reporting and data
analysis, wikipedia
- Business Intelligence: Business intelligence (BI) is the set of
techniques and tools for the transformation of raw data into meaningful
and useful information for business analysis purposes, wikipedia
- OLAP: OLAP is an acronym for online analytical processing
- OLAP Cube: an OLAP cube is an array of data understood in terms of
its 0 or more dimensions,wikipedia
- Star Schema: the star schema consists of one or more fact tables
referencing any number of dimension tables, wikipedia
- Fact Table: a Fact table consists of the measurements, metrics or
facts of a business process,wikipedia
- Lookup Table: a lookup table is an array that replaces runtime
computation with a simpler array indexing operation, wikipedia
- Dimension: A dimension is a structure that categorizes facts and
measures in order to enable users to answer business questions. Commonly
used dimensions are people, products, place and time, wikipedia
- Measure: a measure is a property on which calculations (e.g., sum,
count, average, minimum, maximum) can be made, wikipedia
- Join: a SQL join clause combines records from two or more tables
in a relational database,wikipedia
2.3、关键流程
在 kylin 中,最关键的两个流程是 cube 的预计算过程和 SQL 查询转换成 cube
的过程,cube 的构造可以分成 cube 的构建和 cube 的合并,首先需要创建一个
cube 的定义,包括设置 cube 名、cube 的星状模型结构,dimension 信息、measure
信息、设置 where 条件、根据 hive 中事实表定义的 partition 设置增量 cube,
设置 rowkey 等信息,这些设置在 mondrian 中也是可以看到的,一个 cube 包含
一些 dimension 和 measure,where 条件决定了源数据的大小,在 mondrian 中可
以通过 view 实现。另外,kylin 还提供了增量计算的功能,虽然达不到实时计
算的需求,但是基本上可以满足数据分析的需求。
查询解析过程主要是使用 Calcite 框架将用户输入的 SQL 解析并转换成对
hbase 的 key-value 查询操作以获取结果,但是经过使用发现它对 SQL 的支持是
比较差的,所有的 SQL 不能使用 from A,B where xxx 之类的 join 方式,必须使
用 inner(left、right) join on 的方式,否则解析就会出错,这就会导致
mondrian 生成的 SQL 压根不能使用 kylin 查询(因为 mondrian 生成的 SQL 是前
面一种方式的),另外还有一个局限性就是发现只能对 cube 相关的表和列进行
查询,例如根据维度进行 group by 查询定义的度量信息,而其他的查询也统统
的返回错误,这点倒也不算是很大的问题,毕竟 cube 的模型已经定义,我们不太可能查询
这个模型以外的东西。还有一点有点不能接受的是 kylin 对于子查询的支持很弱,测试发现
查询的结果经常返回空(没有一行),而相同的查询在 hive 中是有结果的,这对于一些产
品方需求支持不是很好,例如产品方可能需要查询年销售额大于 xx 的地区的每个月的销售
总额。我们一般情况下会写出这样的 sql:select month, sum(sales) from fact where location in
(select location from fact group by year having sum(sales) > 1000) group by month;前一段时间
测试发现这种 SQL 对于关系数据库简直是灾难,因为 in 语句会导致后面的子查询没有缓存
结果,而写成 select month, sum(sales) from fact as A inner join (select location from fact group
by year having sum(sales) > 1000) as B on A.location = B.location group by month;可以提高性
能,但是测试发现 kylin 返回的结果为空,而 kylin 对于 in 语句的查询时非常高效的(毕竟全
部走缓存),那么我们就不得不首先执行子查询得到 location 集合,然后再写一个 SQL 使用
where location in xxx(kylin 对于使用 in 子句的查询支持还是相当棒的)的方式获得结果,这
个应该是需要改进的地方吧。
2.4、Cube 模型
前面介绍了 cube 在创建过程中需要的设置,这里看一下每一个设置的具体含义吧,首
先我们会设置 cube 名和 notification 列表,前者需要保证是全局唯一的,后者是一些 Email
用于通知 cube 的一些事件的发生。接着我们需要定义一个星状模型,和一般的数据仓库模
型一样,需要指定一个事实表和任意多个维度表,如果存在维度表还需要指定事实表和维
度表的关联关系,也就是 join 方式。接下来是定义 dimension,在定义 dimension 的时候可
以选择 dimension 的类型,分为 Normal、Hierachy(层次化)以及 Derived,这个后面再进行
介绍,dimension 的定义决定着 cube 的大小,也需要用户对原始的表非常了解。
接下来是定义 measure,kylin 会为每一个 cube 创建一个聚合函数为 count(1)的度量,
它不需要关联任何列,用户自定义的度量可以选择 SUM、COUNT、DISTINCT COUNT、MIN、
MAX,而每一个度量定义时还可以选择这些聚合函数的参数,可以选择常量或者事实表的某
一列,一般情况下我们当然选择某一列。这里我们发现 kylin 并不提供 AVG 等相对较复杂的
聚合函数(方差、平均差更没有了),主要是因为它需要基于缓存的 cube 做增量计算并且
合并成新的 cube,而这些复杂的聚合函数并不能简单的对两个值计算之后得到新的值,例
如需要增量合并的两个 cube 中某一个 key 对应的 sum 值分别为 A 和 B,那么合并之后的则
为 A+B,而如果此时的聚合函数是 AVG,那么我们必须知道这个 key 的 count 和 sum 之后才
能做聚合。这就要求使用者必须自己想办法自己计算了。
定义完 measure 之后需要设置 where 条件,这一步是对原始数据进行过滤,例如我们
设定销售额小于 XXX 的地区不在于本次分析范围之内,那么就可以在 where 条件里设定
location in xxx(子查询),那么生成的 cube 会过滤掉这些 location,这一步其实相当于对无
效数据的清洗,但是在 kylin 中这个是会固化的,不容易改变,例如我今天希望将销售额小
于 XX 的地区清洗掉,明天可能有想将年消费小于 xxx 的用户去除,这就需要每次都创建一
个相同的 cube,区别仅仅在于 where 条件,他们之间会有很多的重复缓存数据,也会导致
存储空间的浪费,但这也是 MOLAP 系统不可避免的,因此当过滤条件变化比较多的时候,
更好的方案则是创建一个完整的 cube(不设置任何 where 条件),使用子查询的方式过滤
掉不希望要的一些维度成员。
接下来的一步是设置增量 cube 信息,首先需要选择事实表中的某一个时间类型的分区
列(貌似只能是按照天进行分区),然后再指定本次构建的 cube 的时间范围(起始时间点
和结束时间点),这一步的结果会作为原始数据查询的 where 条件,保证本次构建的 cube
只包含这个闭区间时间内的数据,如果事实表没有时间类型的分区别或者没有选择任何分区
则表示数据不会动态更新,也就不可以增量的创建 cube 了。
最后一步设置 rowkey,这一步的建议是看看就可以了,不要进行修改,除非对 kylin 内
部实现有比较深的理解才能知道怎么去修改。当然这里有一个可以修改的是 mandatory
dimension,如果一个维度需要在每次查询的时候都出现,那么可以设置这个 dimension 为
mandatory,可以省去很多存储空间,另外还可以对所有维度进行划分 group,不会组合查
询的 dimension 可以划分在不同的 group 中,这样也会降低存储空间。
2.5、Dimension 介绍
在一个多维数据集合中,维度的个数决定着维度之间可能的组合数,而每一个维度中
成员集合的大小决定着每一个可能的组合的个数,例如有三个普通的维度 A、B、C,他们的
不同成员数分别为 10/100/1000,那么一个维度的组合有 2 的 3 次方个,分别是{空、A、B、
C、AB、BC、AC、ABC},每一个成员我们称为 cuboid(维度的组合),而这些集合的成员组
合个数分别为 1、10、100、1000、10*100、100*1000、10*1000 和 10*100*1000。我们称每
一个 dimension 中不同成员个数为 cardinatily,我们要尽量避免存储 cardinatily 比较高的维度
的组合,在上面的例子中我们可以不缓存 BC 和 C 这两个 cuboid,可以通过计算的方式通过
ABC 中成员的值计算出 BC 或者 C 中某个成员组合的值,这相当于是时间和空间的一个权衡
吧。
在 kylin 中存在的四种维度是为了减少 cuboid 的个数,而不是每一个维度是否缓存的,
当前 kylin 是对所有的 cuboid 中的所有组合都进行计算和存储的,对于普通的 dimension,
从上面的例子中可以看出 N 个维度的 cuboid 个数为 2 的 N 次方,而 kylin 中设置了一些维度
可以减少 cuboid 个数,当然,这需要使用者对自己需要的维度十分了解,知道自己可能根
据什么进行 group by。
2.5.1、Mandatory 维度
这种维度意味着每次查询的 group by 中都会携带的,将某一个 dimension 设置为
mandatory 可以将 cuboid 的个数减少一半,如下图:
剩余39页未读,继续阅读
LauraKuang
- 粉丝: 19
- 资源: 335
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- (完整)数据库课程设计餐厅点餐说明书-21ab6d3c8beb172ded630b1c59eef8c75ebf952c.doc
- 2023-04-06-项目笔记 - 第一百五十四阶段 - 4.4.2.152全局变量的作用域-152 -2024.06.04
- 松哥解协议松哥解协议松哥解协议松哥解协议松哥解协议
- 618节日618节日618节日
- tensorflow-gpu-2.9.1-cp37-cp37m-win-amd64.whl
- tensorflow-gpu-2.9.0-cp37-cp37m-win-amd64.whl
- tensorflow-gpu-2.9.0-cp39-cp39-win-amd64.whl
- lcd daimalcd daima
- 电影领域-推荐算法-个性化内容-观影决策-电影推荐小程序.zip
- 电气控制PLC考试题库
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0