笨鸟的平凡之路-Kylin的介绍及CDH版安装

前言

随着移动互联网、物联网等技术的发展,近些年人类所积累的数据正在呈爆炸式的增长,大数据时代已经来临。但是海量数据的收集只是大数据技术的第一步,如何让数据产生价值才是大数据领域的终极目标。Hadoop的出现解决了数据存储问题,但如何对海量数据进行OLAP查询,却一直令人十分头疼。

企业中的查询大致可分为即席查询和定制查询两种。之前出现的很多OLAP引擎,包括Hive、Presto、SparkSQL等,虽然在很大程度上降低了数据分析的难度,但它们都只适用于即席查询的场景。它们的优点是查询灵活,但是随着数据量和计算复杂度的增长,响应时间不能得到保证。而定制查询多数情况下是对用户的操作做出实时反应,Hive等查询引擎动辄数分钟甚至数十分钟的响应时间显然是不能满足需求的。在很长一段时间里,企业只能对数据仓库中的数据进行提前计算,再将算好后的结果存储在MySQL等关系型数据库中,再提供给用户进行查询。但是当业务复杂度和数据量逐渐升高后,使用这套方案的开发成本和维护成本都显著上升。因此,如何对已经固化下来的查询进行亚秒级返回一直是企业应用中的一个痛点。

在这种情况下,Apache Kylin应运而生。不同于“大规模并行处理”(Massive Parallel Processing,MPP)架构的Hive、Presto等,Apache Kylin采用“预计算”的模式,用户只需要提前定义好查询维度,Kylin将帮助我们进行计算,并将结果存储到HBase中,为海量数据的查询和分析提供亚秒级返回,是一种典型的“空间换时间”的解决方案。Apache Kylin的出现不仅很好地解决了海量数据快速查询的问题,也避免了手动开发和维护提前计算程序带来的一系列麻烦。

Apache Kylin最初由eBay公司开发,并贡献给Apache基金会,但是目前Apache Kylin的核心开发团队已经自立门户,创建了Kyligence公司。值得一提的是,Apache Kylin是第一个由中国人主导的Apache顶级项目(2017年4月19日,华为的 CarbonData成为Apache顶级项目,因此Apache Kylin不再是唯一由国人贡献的Apache顶级项目)。由于互联网技术和开源思想进入我国的时间较晚,开源软件的世界一直是由西方国家主导,在数据领域也不例外。从Hadoop到Spark,再到最近大热的机器学习平台TenserFlow等,均是如此。但近些年来,我们很欣喜地看到以Apache Kylin为首的各种以国人主导的开源项目不断地涌现出来,这些技术不断缩小着我国与西方开源技术强国之间的差距,提升我国技术人员在国际开源社区的影响力。

Apache Kylin采用多维立方体预计算技术,利用空间换时间的方法,把很多分钟级别乃至小时级别的大数据查询速度一下子提升到了亚秒级别,极大地提高了数据分析的效率,填补了业界在这方面的空白。该引擎为超大规模数据集上的交互式大数据分析打开了大门。


一、核心概念

在了解Apache Kylin的使用以前,我们有必要先来了解一下在Apache Kylin中会出现的核心概念。

数据仓库

Data Warehouse,简称DW,中文名数据仓库,是商业智能(BI)中的核心部分。主要是将不同数据源的数据整合到一起,通过多维分析等方式为企业提供决策支持和报表生成。那么它与我们熟悉的传统关系型数据库有什么不同呢?

简而言之,用途不同。数据库面向事务,而数据仓库面向分析。数据库一般存储在线的业务数据,需要对上层业务的改变做出实时反应,涉及到增删查改等操作,所以需要遵循三大范式,需要ACID。而数据仓库中存储的则主要是历史数据,主要目的是为企业决策提供支持,所以可能存在大量数据冗余,但利于多个维度查询,为决策者提供更多观察视角。

在传统BI领域中,数据仓库的数据同样存储在Oracle、MySQL等数据库中,而在大数据领域中最常用的数据仓库就是Apache Hive,Hive也是Apache Kylin默认的数据源。

OLAP

OLAP(Online Analytical Process),联机分析处理,以多维度的方式分析数据,一般带有主观的查询需求,多应用在数据仓库。与之对应的是OLTP(Online Transaction Process),联机事务处理,侧重于数据库的增删查改等常用业务操作。了解了上面数据库与数据仓库的区别后,OLAP与OLTP的区别就不难理解了。

维度和度量

维度和度量是数据分析领域中两个常用的概念。

简单地说,维度就是观察数据的角度。比如传感器的采集数据,可以从时间的维度来观察:
在这里插入图片描述
也可以进一步细化,从时间和设备两个角度观察:
在这里插入图片描述
维度一般是离散的值,比如时间维度上的每一个独立的日期,或者设备维度上的每一个独立的设备。因此统计时可以把维度相同的记录聚合在一起,然后应用聚合函数做累加、均值、最大值、最小值等聚合计算。

度量就是被聚合的统计值,也就是聚合运算的结果,它一般是连续的值,如以上两个图中的温度值,或是其他测量点,比如湿度等等。通过对度量的比较和分析,我们就可以对数据做出评估,比如这个月设备运行是否稳定,某个设备的平均温度是否明显高于其他同类设备等等。

Cube和Cuboid

了解了维度和度量之后,我们可以将数据模型上的所有字段进行分类:它们要么是维度,要么是度量。根据定义好的维度和度量,我们就可以构建Cube了。

对于一个给定的数据模型,我们可以对其上的所有维度进行组合。对于N个维度来说,组合所有可能性共有2的N次方种。对于每一种维度的组合,将度量做聚合计算,然后将运算的结果保存为一个物化视图,称为Cuboid。所有维度组合的Cuboid作为一个整体,被称为Cube。

举个例子。假设有一个电商的销售数据集,其中维度包括时间(Time)、商品(Item)、地点(Location)和供应商(Supplier),度量为销售额(GMV)。那么所有维度的组合就有2的4次方,即16种,比如一维度(1D)的组合有[Time]、[Item]、[Location]、[Supplier]4种;二维度(2D)的组合有[Time Item]、[Time Location]、[Time Supplier]、[Item Location]、[Item Supplier]、[Location Supplier]6种;三维度(3D)的组合也有4种;最后零维度(0D)和四维度(4D)的组合各有1种,总共16种。

计算Cubiod,即按维度来聚合销售额。如果用SQL语句来表达计算Cuboid [Time, Location],那么SQL语句如下:

SQL > select Time, Location, Sum(GMV) as GMV from Sales group by Time, Location

将计算的结果保存为物化视图,所有Cuboid物化视图的总称就是Cube。

事实表和维度表

事实表(Fact Table)是指存储有事实记录的表,如系统日志、销售记录、传感器数值等;事实表的记录是动态增长的,所以它的体积通常远大于维度表。

维度表(Dimension Table)或维表,也成为查找表(Lookup Table),是与事实表相对应的一种表;它保存了维度的属性值,可以跟事实表做关联;相当于将事实表上经常重复的属性抽取、规范出来用一张表进行管理。常见的维度表有:日期表(存储与日期对应的周、月、季度等属性)、地区表(包含国家、省/州、城市等属性)等。维度表的变化通常不会太大。使用维度表有许多好处:

  • 缩小了事实表的大小。
  • 便于维度的管理和维护,增加、删除和修改维度的属性,不必对事实表的大量记录进行改动。
  • 维度表可以为多个事实表重用。

星形模型

星形模型(Star Schema)是数据挖掘中常用的几种多维数据模型之一。它的特点是只有一张事实表,以及零到多个维度表,事实表与维度表通过主外键相关联,维度表之间没有关联,就像许多小星星围绕在一颗恒星周围,所以名为星形模型。

另一种常用的模型是雪花模型(SnowFlake Schema),就是将星形模型中的某些维表抽取成更细粒度的维表,然后让维表之间也进行关联,这种形状酷似雪花的的模型称为雪花模型。

还有一种更为复杂的模型,具有多个事实表,维表可以在不同事实表之间公用,这种模型被称为星座模型。

不过,Kylin目前只支持星形模型


二、Apache Kylin的技术架构

在这里插入图片描述

首先来看离线构建部分。从图中可以看出,左侧为数据源,目前Kylin默认的数据源是Apache Hive,保存着待分析的用户数据。根据元数据的定义,构建引擎从数据源抽取数据,并构建Cube。数据以关系表的形式输入,并且必须符合星形模型。构建技术主要为MapReduce(Spark目前在beta版本)。构建后的Cube保存在右侧存储引擎中,目前Kylin默认的存储为Apache HBase。

完成离线构建后,用户可以从上方的查询系统发送SQL进行查询分析。Kylin提供了RESTful API、JDBC/ODBC接口供用户调用。无论从哪个接口进入,SQL最终都会来到REST服务层,再转交给查询引擎进行处理。查询引擎解析SQL,生成基于关系表的逻辑执行计划,然后将其转译为基于Cube的物理执行计划,最后查询预计算生成的Cube并产生结果。整个过程不会访问原始数据源。如果用户提交的查询语句未在Kylin中预先定义,Kylin会返回一个错误。

值得一提的是,Kylin对数据源、执行引擎和Cube存储三个核心模块提取出了抽象层,这意味着这三个模块可以被任意地扩展和替换。比如可以使用Spark替代MapReduce作为Cube的构建引擎,使用Cassandra替代HBase作为Cube计算后数据的存储等。良好的扩展性使得Kylin可以在这个技术发展日新月异的时代方便地使用更先进的技术替代现有技术,做到与时俱进,也使用户可以针对自己的业务特点对Kylin进行深度定制。

Apache Kylin的这种架构使得它拥有许多非常棒的特性:

  • SQL接口:
    Kylin主要的对外接口就是以SQL的形式提供的。SQL简单易用的特性极大地降低了Kylin的学习成本,不论是数据分析师还是Web开发程序员都能从中收益。

  • 支持海量数据集:
    不论是Hive、SparkSQL,还是Impala、Presto,都改变不了这样一个事实:查询时间随着数据量的增长而线性增长。而Apache Kylin使用预计算技术打破了这一点。Kylin在数据集规模上的局限性主要取决于维度的个数和基数,而不是数据集的大小,所以Kylin能更好地支持海量数据集的查询。

  • 亚秒级响应:
    同样受益于预计算技术,Kylin的查询速度非常快,因为复杂的连接、聚合等操作都在Cube的构建过程中已经完成了。

  • 水平扩展:
    Apache Kylin同样可以使用集群部署方式进行水平扩展。但部署多个节点只能提高Kylin处理查询的能力,而不能提升它的预计算能力。

  • 可视化集成:
    Apache Kylin提供了ODBC/JDBC接口和RESTful API,可以很方便地与Tableau等数据可视化工具集成。数据团队也可以在开放的API上进行二次开发。


三、Apache Kylin的安装

Apache Kylin的安装对于Hadoop,Hive,Hbase的版本都有要求。

软件要求

  • Hadoop: 2.7+, 3.1+ (since v2.5)
  • Hive: 0.13 - 1.2.1+
  • HBase: 1.1+, 2.0 (since v2.5)
  • Spark (可选) 2.3.0+
  • Kafka (可选) 1.0.0+ (since v2.5)
  • JDK: 1.8+ (since v2.5)
  • OS: Linux only, CentOS 6.5+ or Ubuntu 16.0.4+

笔者所用的是CDH5.11.2版本,软件如下:

  • Hadoop 2.6.0
  • Hive 1.1.0
  • Hbase 1.2.0
  • JDK: 1.8+
  • OS: Linux

下载tar包

根据hadoop版本对应tar包下载地址:https://archive.apache.org/dist/kylin/

笔者这里下载的是CDH版本的:
在这里插入图片描述

解压

Master主节点操作:

tar -zxvf apache-kylin-2.6.0-bin-cdh57.tar.gz -C /usr/local
cd /usr/local
mv ./apache-kylin-2.6.0-bin/ ./kylin

配置环境变量

vim /etc/profile
### kylin #### 
export KYLIN_HOME=/usr/local/kylin
PATH=$PATH:$HOME/bin:$KYLIN_HOME/bin
source /etc/profile

启动验证

验证

cd /usr/local/kylin/bin
./check-env.sh

如下图:
在这里插入图片描述

启动

./kylin.sh start

...
A new Kylin instance is started by root. To stop it, run 'kylin.sh stop'
Check the log at /usr/local/kylin/logs/kylin.log
Web UI is at http://<hostname>:7070/kylin

出现以上消息即证明安装及启动成功。
我们去到kylin的Web UI界面:

在这里插入图片描述
默认用户名:ADMIN
密码:KYLIN
在这里插入图片描述


四、官方测试用例

Kylin 提供了一个创建样例 Cube 脚本;脚本会创建五个样例 Hive 表。

导入数据

运行sample.sh导入官方测试数据

cd /usr/local/kylin/bin
./sample.sh

输出:

Sample cube is created successfully in project 'learn_kylin'.
Restart Kylin Server or click Web UI => System Tab => Reload Metadata to take effect

在这里插入图片描述
这句话的意思是 例子cube已成成功创建在了 工程名称叫’learn_kylin’里面了
重启kylin或者通过webUI => System选项卡=> 重新导入元数据信息

重启kylin

cd /usr/local/kylin/bin
./kylin.sh stop 
./kylin.sh start

或者在Web UI重载Metadata:
在这里插入图片描述
hive 中查看

hive> show tables;
OK
kylin_account
kylin_cal_dt
kylin_category_groupings
kylin_country
kylin_sales

hive 的default库 当中多了5张kylin的表

hive> select * from kylin_sales limit 5;
OK
0	2012-12-14	Others	88750	0	11	36.2828	4	10000349	10002313	ANALYST	Beijing
1	2012-08-28	Others	175750	0	13	23.8563	20	10000927	10004376	ANALYST	Beijing
2	2012-02-16	ABIN	148324	15	13	88.3418	18	10000005	10006710	ADMIN	Shanghai
3	2013-10-19	FP-non GTC	37831	0	13	47.3015	3	10000209	10003717	ANALYST	Beijing
4	2012-10-22	Others	140746	100	11	83.454	16	10000154	10006076	ADMIN	Shanghai

查看导入模型

用默认的用户名和密码 ADMIN/KYLIN 登陆 Kylin 网站,选择 project 下拉框(左上角)中的 learn_kylin 工程;
查看导入的信息 => 点击最上面选项卡 Model
在这里插入图片描述

构建Cube

选择名为 kylin_sales_cube 的样例 Cube,点击 “Actions” -> “Build”
在这里插入图片描述
选择一个在 2014-01-01 之后的结束日期(覆盖所有的 10000 样例记录),选择数据分区范围
在这里插入图片描述

查看正在构建的cube任务,点击 “Monitor” 标签,查看 build 进度直至 100%;

在这里插入图片描述

查询构建完成的cube信息

点击 “Insight” 标签,执行 SQLs,例如:

select part_dt, sum(price) as total_sold, count(distinct seller_id) as sellers from kylin_sales group by part_dt order by part_dt

在这里插入图片描述
Kylin执行上面语句用时:3.68s
在这里插入图片描述
我们来验证查询结果且与 Hive 的响应时间进行比较;
hive中用时62.422s。
在这里插入图片描述
经测试SparkSQL的响应时间也是不及Kylin的。
由此可以看出Kylin这种预计算方式的数据查询效率远远好于Hive和SparkSQL这种并行处理计算框架。

多表关联查询

多表关联查询,速度依然很快,查询下面多表关联语句,耗时1.05秒。

SELECT sum(KYLIN_SALES.PRICE) AS price_sum,
       KYLIN_CATEGORY_GROUPINGS.META_CATEG_NAME,
       KYLIN_CATEGORY_GROUPINGS.CATEG_LVL2_NAME
FROM KYLIN_SALES
INNER JOIN KYLIN_CATEGORY_GROUPINGS ON KYLIN_SALES.LEAF_CATEG_ID = KYLIN_CATEGORY_GROUPINGS.LEAF_CATEG_ID
AND KYLIN_SALES.LSTG_SITE_ID = KYLIN_CATEGORY_GROUPINGS.SITE_ID
GROUP BY KYLIN_CATEGORY_GROUPINGS.META_CATEG_NAME,
         KYLIN_CATEGORY_GROUPINGS.CATEG_LVL2_NAME
ORDER BY KYLIN_CATEGORY_GROUPINGS.META_CATEG_NAME ASC,
         KYLIN_CATEGORY_GROUPINGS.CATEG_LVL2_NAME DESC

在这里插入图片描述
Kylin还提供了图表工具,点击Visualization
在这里插入图片描述
在这里插入图片描述


五、总结

Kylin的本质是基于预计算,根据维度个数事先将组合个数计算出来,也就是不同维度直接互相组合成不同的结果,kylin根据这些组合先提交任务去计算成一个个的Cuboid,然后将所有的Cuboid组合成一个Cube。
为什么kylin得出结果如此之快,是因为kylin在预计算的时候将结果存储在Hbase中。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值