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 提供了对于 ...
随机推荐
- 如何实现一个简单易用的 RocketMQ SDK
2018 年,做为架构负责人,接到一个架构需求:实现一个简单易用的 RocketMQ SDK . 因为各个团队 RocketMQ 原生客户端配置起来千奇百怪,有的配置存在风险,各团队负责人都需要一个简 ...
- nim 8. 异常处理
基本的异常处理 try: let d = newSeq[int]() echo "value: ", d[2] except: let e = getCurrentExceptio ...
- 从XML配置角度理解Spring AOP
本文分享自华为云社区<Spring高手之路18--从XML配置角度理解Spring AOP>,作者: 砖业洋__. 1. Spring AOP与动态代理 1.1 Spring AOP和动态 ...
- java学习之旅(day.11)
static详解 static若在类中使用,就是修饰成员变量 static若在方法中使用,就是成员方法? static加在方法上叫静态方法,加在属性上叫做静态属性 package com.zhang. ...
- efcore如何优雅的实现按年分库按月分表
efcore如何优雅的实现按年分库按月分表 介绍 本文ShardinfCore版本 本期主角: ShardingCore 一款ef-core下高性能.轻量级针对分表分库读写分离的解决方案,具有零依赖. ...
- Semantic Kernel入门系列:利用Handlebars创建Prompts functions
引言 本章我们将学习通过Handlebars Prompts Template来创建Prompts functions. 什么是Handlebars? Handlebars是一个流行的 JavaScr ...
- 腾讯面试:如何提升Kafka吞吐量?
Kafka 是一个分布式流处理平台和消息系统,用于构建实时数据管道和流应用.它最初由 LinkedIn 开发,后来成为 Apache 软件基金会的顶级项目. Kafka 特点是高吞吐量.分布式架构.支 ...
- django中的多表关联
一.三种关联情况 二.ORM的正向操作和反向操作 1.正向操作: 一个模型中定义了一个外键,通过该模型对该外键操作的操作叫做正向操作. 2.反向操作: 被外键所关联的模型,通过该模型对外键所在模型的操 ...
- shell脚本的调试
参数: -n :读一遍脚本中的命令但不执行,用于检查脚本中的语法错误 -v :一边执行脚本,一边将执行过的脚本命令打印到标准错误输出 -x :提供跟踪执行信息,将执行的每一条命令和结果依次打印出来 使 ...
- 浅谈C#中取消令牌CancellationTokenSource
基础操作 CancellationTokenSource cancellationTokenSource = new CancellationTokenSource(); cancellationTo ...