1. 传统大数据分析的问题

在基于Hadoop 生态的传统大数据分析中,主要使用的技术是MPP(Massively Parallel Processing)大规模并行处理和列式存储。MPP使用线性增加计算资源换取计算时间的线性下降,列式存储可以提高读取数据的速率。两者结合可以使得基于 Hadoop 的SQL 查询速度从小时级降为分钟级。不过分钟级别的查询响应仍未达到交互式分析级别,主要问题在于:MPP以及列式存储,并未改变查询问题的根本问题,也就是“查询时间与数据量存在线性增长关系“的这一事实。

2. Kylin

Kylin是基于Hadoop 大数据平台的一个在线分析处理(OLAP)引擎,再用多维立方体与计算技术,将大数据的SQL查询速度从之前的数分钟乃至几小时提升至亚秒级别。这种极大的速度提升,使得超大型数据集的交互式分析成为可能。其中关键的就是打破查询时间随数据量呈线性增长的事实。

对于 OLAP,可以注意到两点事实:

  1. 大数据查询的一般是统计结果,是多条记录聚合之后的统计值,并不是原始的记录(或是说原始记录访问的频率非常低)
  2. 聚合是按维度进行的,而维度的聚合可能性是有限的,一般不会随着数据的增长而线性增长

基于这两点,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 预计算,并利用计算的结果加速查询。过程如下:

  1. 指定数据类型,定义维度和度量
  2. 预计算Cube,计算所有Cuboid 并将其保存为物化视图
  3. 执行查询时,读取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介绍的更多相关文章

  1. [kylin] 部署kylin服务

    一.工具准备 zookeeper3.4.6 (hadoop.hbase 管理工具) Hadoop. Hbase1.1.4 Kylin1.5.0-HBase1.1.3 Jdk1.7.80 Hive 二. ...

  2. Apache账户密码加密方式介绍

    一.apache密码存储格式 apache的用户密码一般会生成保存在.htpasswd文件中,保存路径由用户创建时确定,根据使用加密算法有五种保存格式: [注]:如果用户指定了保存密码的文件名,视用户 ...

  3. Apache Kylin的框架介绍

    不多说,直接上干货! Apache kylin 能提供低延迟(sub-second latency)的秘诀就是预计算,即针对一个星型拓扑结构的数据立方体,预计算多个维度组合的度量,然后将结果保存在hb ...

  4. Kylin on Parquet 介绍和快速上手

    Apache Kylin on Apache HBase 方案经过长时间的发展已经比较成熟,但是存在着一定的局限性.Kylin 查询节点当前主要的计算是在单机节点完成的,存在单点问题.而且由于 HBa ...

  5. kylin streaming原理介绍与特点浅析

    目录 前言 kylin streaming设计和原理 架构介绍 streaming coordinator streaming receiver cluster kylin streaming数据构建 ...

  6. apache开源项目--kylin

    Kylin 是一个开源的分布式的 OLAP 分析引擎,来自 eBay 公司开发,基于 Hadoop 提供 SQL 接口和 OLAP 接口,支持 TB 到 PB 级别的数据量. Kylin 是: 超级快 ...

  7. Apache Commons 工具类介绍及简单使用

    转自:http://www.cnblogs.com/younggun/p/3247261.html Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动.下 ...

  8. Apache shiro的简单介绍与使用(与spring整合使用)

    apache shiro框架简介 Apache Shiro是一个强大而灵活的开源安全框架,它能够干净利落地处理身份认证,授权,企业会话管理和加密.现在,使用Apache Shiro的人越来越多,因为它 ...

  9. Apache shiro的简单介绍与使用(与spring整合使用,并加入ehcache缓存权限数据)

    apache shiro框架简介 Apache Shiro是一个强大而灵活的开源安全框架,它能够干净利落地处理身份认证,授权,企业会话管理和加密.现在,使用Apache Shiro的人越来越多,因为它 ...

  10. Apache Commons 工具集介绍

    Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动.下面是我这几年做开发过程中自己用过的工具类做简单介绍. 组件 功能介绍 BeanUtils 提供了对于 ...

随机推荐

  1. Dinky实时计算平台

    前言:Apache Flink 作为新一代的实时计算框架已经被应用到各个行业与领域,其岂存在着应用的痛点比如 FlinkSQL 在线IDE.作业提交不友好.作业无监控报警等.很大程度上说,FlinkS ...

  2. Winform项目中纯代码创建WCF服务

    接口: [ServiceContract(CallbackContract = typeof(IViewCallback), SessionMode = SessionMode.Required)] ...

  3. AI 编译器CINN中的OpLowering优化Pass

    一.Lower 主逻辑 在 OpLower::Lower() 接口中,主要分为两大类: Elementwise类,主要涉及的 OpPattern 包括:kElementwise .kBroadcast ...

  4. nim 4. 模块

    看了一下nim的模块系统,真的非常简洁. 1) 一个nim文件就是一个模块 2) 通过import 引入模块,引入的时候不需要带扩展名, 比如有个模块 mod1.nim,  引入的时候: import ...

  5. 4G EPS 中的 Bearer

    目录 文章目录 目录 前文列表 承载的内涵 EPS Bearer QoS QoS 的关键参数 APR GBR.MBR AMBR UE 是如何选择 EPS Bearer 的? E-RAB Radio B ...

  6. Python:用tqdm模块绘制进度条

    在计算密集型迭代计算中,我们常常需要知道当前的迭代轮次,最传统的方法就是打印当前迭代计数器的轮数.那有没有更好的方法呢?我们可以使用tqdm模块(非py内置,需要单独按照)来在控制台绘制进度条,这样更 ...

  7. 网络广告代理商是如何通过Cookie收集用户信息的

    更多博文请关注:https://blog.bigcoder.cn 不知道大家有没有这样的经历,我在某宝上搜索一个商品,然后再打开其它网站,它会非常"智能"的给我推荐同一商品. 这样 ...

  8. 一个前后端都有的后台管理系统,使用nest.js和vue3

    今天介绍一个新的Vue后台管理框架,相比其他后台功能丰富管理系统,这个后台管理系统可以用干净简洁来形容--Nova-admin Nova-admin Nova-admin 是一个基于Vue3.Vite ...

  9. openstack考试需要的部署操作

    openstack操作大全 一,keystone 用户 1.创建用户 openstack user create --password 密码 --email邮箱 --domain 域名 用户名字 2. ...

  10. 操作标签的属性和属性值 table表格

     // 操作标签的属性和属性值         // 特殊的属性           // 可以直接通过 点语法或者[]语法来操作的属性         // id 和 class           ...