Apache Kylin(一)Kylin介绍
1. 传统大数据分析的问题
在基于Hadoop 生态的传统大数据分析中,主要使用的技术是MPP(Massively Parallel Processing)大规模并行处理和列式存储。MPP使用线性增加计算资源换取计算时间的线性下降,列式存储可以提高读取数据的速率。两者结合可以使得基于 Hadoop 的SQL 查询速度从小时级降为分钟级。不过分钟级别的查询响应仍未达到交互式分析级别,主要问题在于:MPP以及列式存储,并未改变查询问题的根本问题,也就是“查询时间与数据量存在线性增长关系“的这一事实。
2. Kylin
Kylin是基于Hadoop 大数据平台的一个在线分析处理(OLAP)引擎,再用多维立方体与计算技术,将大数据的SQL查询速度从之前的数分钟乃至几小时提升至亚秒级别。这种极大的速度提升,使得超大型数据集的交互式分析成为可能。其中关键的就是打破查询时间随数据量呈线性增长的事实。
对于 OLAP,可以注意到两点事实:
- 大数据查询的一般是统计结果,是多条记录聚合之后的统计值,并不是原始的记录(或是说原始记录访问的频率非常低)
- 聚合是按维度进行的,而维度的聚合可能性是有限的,一般不会随着数据的增长而线性增长
基于这两点,Kylin中使用了“预计算”:尽量使用预先计算得到的“聚合结果“,在查询时也尽量使用预计算的结果,得到最终查询结果。从而避免直接扫描规模非常大的原始数据。
举个例子,使用下面的SQL语句查询10月1日那天销量最高的商品:
SELECT item, SUM(sell_amount)
FROM sell_details
WHERE sell_date=’2016-10-01’
GROUP BY item
ORDER BY SUM(sell_amount) DESC
传统方法需要扫描所有记录,找到 2016-10-01 的销售记录,然后按item ,对sell_amount 进行 SUM 聚合,然后降序排列返回。假如10月1日当天有1亿条交易记录,那么查询必须读取的数据量至少1亿条,并按交易记录数线性增长,查询时间也会线性增长。
而若是使用预计算,则会事先按维度 [sell_date, item] 计算 SUM(sell_amount) 并将其存储下来。在查询时,找到10月1日的销售商品,就可以直接排序返回了。读取的记录数最大不会超过维度[sell_date, item] 的组合数。
假设我们的sell_date 为2016年的每日,则sell_date 一共有365 种);假设商品一共有 10 万条,则[sell_date, item] 的组合数为 3650 万种。此时无论有多少条交易记录,读取的记录数最多都不会超过 3650万条。假设10月1日的交易包含了 5 万条商品(某天的交易可能并不会覆盖到所有商品),那么在预计算后就仅有 5 万条记录了。无论是10月1号有多少条交易记录,甚至是几亿条,只要是涉及的商品只有5万条,则预计算后的结果也仅有 5 万条。而且此预计算的结果是已经按商品聚合后的结果,省去了运行时的聚合计算。
预计算就是kylin在PPM已经列式存储之外,提供给大数据分析的第三个关键技术。
3. Kylin 工作原理
Kylin 的工作原理本质上是MOLAP(Multidimensional Online Analytical Processing)Cube,也就是多维立方体分析。这是数据分析中非常经典的理论,在RMDB时代就已广泛使用。
3.1. 维度和度量
维度(Dimension)就是观察数据的角度,比如商品的销售数据,可以从时间的维度来观察(如下左图所示),也可以进一步细化从时间与地区的维度来观察(如下右图所示):

维度一般是一组离散的值,比如时间维度上的每个独立日期,或者商品维度上的每一件独立的商品。所以在统计时可以把“维度值相同“的记录聚合起来,应用聚合运算(例如累加SUM,平均AVG,去重DISTINCT等)。
而度量就是被聚合的统计值,也是聚合运算的结果,一般是连续值,如上图中的销售额。通过比较和测算度量,分析师可以对数据进行评估,比如今年销售额是否较去年有增长、增速是否达预期、不同商品种类的销售增长是否合理等。
3.2 Cube 和 Cuboid
在有了维度和度量的概念后,就可以对数据表或数据模型上的所有字段进行分类了,它们要么是维度,要么是度量(可以被聚合)。之后就有了根据维度、度量做预计算的Cube理论。
给定一个数据模型,我们可以对其上所有维度进行组合。对于N个维度来说,所有组合可能性有2N种。对每一种维度的组合,做度量的聚合运算,运算的结果保存为一个物化视图,称为Cuboid。将所有维度组合成的Cuboid作为一个整体,称为Cude。所以简单地说,一个Cube就是许多按维度聚合的物化视图的集合。
举个例子,假设有一个电商的销售数据集,其中维度有时间(Time),商品(Item)、地点(Location)和供应商(Supplier),度量有销售额(GMV)。那么所有维度的组合就有24=16种。比如一维(1D)的组合有[Time], [Item], [Location], [Supplier] 四种;二维(2D)的组合有[Time, Item], [Time, Location], [Time, Supplier], [Item, Location], [Item, Supplier], [Location, Supplier] 六种;三维(3D)的组合也有4种;最后零维度(0D)和四维度(4D)组合各一种,共计16种组合。
计算Cuboid,就是按维度来聚合销售额(GMV),如果用SQL表达式来计算Cuboid[Time, Location],那就是:
SELECT Time, Location, SUM(GMV) as GMV
FROM Sales
GROUP BY Time, Location
将计算的结果保存为物化视图,所有Cuboid 物化视图的总称就是Cube了。
3.3 Kylin 工作原理
Apache Kylin 的工作原理就是对数据模型做Cube 预计算,并利用计算的结果加速查询。过程如下:
- 指定数据类型,定义维度和度量
- 预计算Cube,计算所有Cuboid 并将其保存为物化视图
- 执行查询时,读取Cuboid,进行加工运算产生查询结果
由于Kylin 查询过程中不会扫描原始记录,而是通过预计算预先完成表的关联、聚合等复杂运算,并利用预计算结果来执行查询,因此其速度比非预计算的查询技术一般要快一到两个数量级。特别是在超大数据集上的优势更加明显,当数据集达到千亿乃至万亿级别时,Kylin的速度甚至可以超越其他非预计算技术1000倍以上。
4. 事实表(Fact Table)与维度表(Dimension Table)
事实表(Fact Table)是指存储事实记录的表,如电商的销售日志,并且是维度模型中的主表,代表着键和度量的集合。事实表的记录会不断地增长,所以它的体积远大于其他表,通常事实表占据数据仓库中90%或更多的空间。
维度表(Dimension Table),也称为维表或查找表(Lookup Table),是与事实表相对应的一种表。维度表的目的是将业务含义和上下文添加到数据仓库中的事实表和度量中。维度表是事实表的入口点,它实现了数据仓库的业务接口。它们基本上是事实表中的键引用的查找表。它保存了维度的属性值,可以与事实表做关联,相当于将事实表上经常出现的属性抽取、规范出来用一张表进行管理,常见的维度表如:日期表(存储日期对应的周、月、季度等属性)、地点表(包含国家、省/州、城市等属性)等。使用维度表的好处有:
- 减小了事实表的大小;
- 便于维度的管理和维护,增加、删除和修改维度的属性时,不必对事实表的大量记录进行改动;
- 维度表可以为多个事实表同时使用,减少重复工作。
在 Kylin 中构建 Cube 时,会使用到事实表与维度表,届时通过例子可以更清晰地了解这两个表的区别。
以上便是 Kylin 的基本介绍,下章我们会介绍如何在 AWS EMR 上搭建 Kylin。
Apache Kylin(一)Kylin介绍的更多相关文章
- [kylin] 部署kylin服务
一.工具准备 zookeeper3.4.6 (hadoop.hbase 管理工具) Hadoop. Hbase1.1.4 Kylin1.5.0-HBase1.1.3 Jdk1.7.80 Hive 二. ...
- Apache账户密码加密方式介绍
一.apache密码存储格式 apache的用户密码一般会生成保存在.htpasswd文件中,保存路径由用户创建时确定,根据使用加密算法有五种保存格式: [注]:如果用户指定了保存密码的文件名,视用户 ...
- Apache Kylin的框架介绍
不多说,直接上干货! Apache kylin 能提供低延迟(sub-second latency)的秘诀就是预计算,即针对一个星型拓扑结构的数据立方体,预计算多个维度组合的度量,然后将结果保存在hb ...
- Kylin on Parquet 介绍和快速上手
Apache Kylin on Apache HBase 方案经过长时间的发展已经比较成熟,但是存在着一定的局限性.Kylin 查询节点当前主要的计算是在单机节点完成的,存在单点问题.而且由于 HBa ...
- kylin streaming原理介绍与特点浅析
目录 前言 kylin streaming设计和原理 架构介绍 streaming coordinator streaming receiver cluster kylin streaming数据构建 ...
- apache开源项目--kylin
Kylin 是一个开源的分布式的 OLAP 分析引擎,来自 eBay 公司开发,基于 Hadoop 提供 SQL 接口和 OLAP 接口,支持 TB 到 PB 级别的数据量. Kylin 是: 超级快 ...
- Apache Commons 工具类介绍及简单使用
转自:http://www.cnblogs.com/younggun/p/3247261.html Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动.下 ...
- Apache shiro的简单介绍与使用(与spring整合使用)
apache shiro框架简介 Apache Shiro是一个强大而灵活的开源安全框架,它能够干净利落地处理身份认证,授权,企业会话管理和加密.现在,使用Apache Shiro的人越来越多,因为它 ...
- Apache shiro的简单介绍与使用(与spring整合使用,并加入ehcache缓存权限数据)
apache shiro框架简介 Apache Shiro是一个强大而灵活的开源安全框架,它能够干净利落地处理身份认证,授权,企业会话管理和加密.现在,使用Apache Shiro的人越来越多,因为它 ...
- Apache Commons 工具集介绍
Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动.下面是我这几年做开发过程中自己用过的工具类做简单介绍. 组件 功能介绍 BeanUtils 提供了对于 ...
随机推荐
- SAP集成技术(十二)SAP PO
集成工作的一个重要部分是基于流程的集成,而在SAP环境中实现接口需求的众所周知的产品是SAP Process Orchestration(以下简称SAP PO). 现代集成架构通常使用中央系统来控制和 ...
- ruby 定时器 rufus-scheduler
安装 gem install rufus-scheduler ruby #!/usr/bin/env ruby require 'rubygems' require 'rufus-scheduler' ...
- ansible系列(32)--ansible实战之部署WEB集群架构(2)
1. 基础环境role编写 创建基础环境role的相关目录: [root@xuzhichao cluster-roles]# mkdir base-module/{tasks,handlers,fil ...
- HDU 多校 2023 Round #5 题解
HDU 多校 2023 Round #5 题解 \(\text{By DaiRuiChen007}\) A. Typhoon Problem Link 题目大意 给一条 \(n\) 个点构成的折线,\ ...
- three.js教程5-几何体顶点UV坐标、纹理贴图TextureLoader
1.纹理贴图 纹理贴图,是给MeshLambertMaterial等材质一些纹理图片,以达到更好的视觉效果. 使用方法:通过纹理贴图加载器TextureLoader的load()方法加载一张图片可以返 ...
- resteasy和springmvc的区别
resteasy 是 jboss的一个开源java api for restful service(JSR 311,sun 2008年发布,最新GA版本是2.0, JAX-RS 2.0 (JSR-33 ...
- 回顾复习x学习笔记
从头回顾(截至搜索) #define fo(x,y,z) for(int (x)=(y);(x)<=(z);(x)++) #define foo(x,y,z) for(int (x)=(y);( ...
- 深入理解Docker原理
本文参考转载至:<深入剖析Kubernetes - 张磊> 更过优秀博文请关注:https://blog.bigcoder.cn 容器技术的核心功能,就是通过约束和修改进程的动态表现,从而 ...
- 20220314线上panic总结
panic: runtime error: invalid memory address or nil pointer dereference [signal SIGSEGV: segmentatio ...
- FFmpeg下载编译、代码结构以及编译系统
从这里开始,就要踏上学习FFmpeg的旅程了,使用的FFmpeg版本5.0.1 1.ubuntu下,如何下载并编译FFmpeg源码 打开FFmpeg官网 Download FFmpeg,我们可以通过g ...