2018-09-14 13:33:03 onlyzhaozhen 阅读数 170
  • Kylin大数据实战学习教程

    本课程为专题课,通过全面讲解Kylin架构原理、分布式集群搭建以及项目案例,让你快速掌握Kylin实时大数据BI技术,从而解决海量数据多维指标动态计算耗时问题、复杂条件筛选问题以及跨月、季度、年等大时间区间查询问题。

    990 人正在学习 去看看 易水
[url=https://blog.csdn.net/rainmt_tank/article/details/50239165]Kylin 大数据时代的OLAP利器[/url]
2019-04-20 20:16:40 qq_24708791 阅读数 799
  • Kylin大数据实战学习教程

    本课程为专题课,通过全面讲解Kylin架构原理、分布式集群搭建以及项目案例,让你快速掌握Kylin实时大数据BI技术,从而解决海量数据多维指标动态计算耗时问题、复杂条件筛选问题以及跨月、季度、年等大时间区间查询问题。

    990 人正在学习 去看看 易水

1.概述

1.1 Kylin是什么

    Apache Kylin(Extreme OLAP Engine for Big Data)是一个开源的分布式分析引擎,为Hadoop等大型分布式数据平台之上的超大规模数据集通过标准SQL查询及多维分析(OLAP)功能,提供亚秒级的交互式分析能力。

1.2 Kylin的由来

    Apache Kylin,中文名麒麟,是Hadoop动物园的重要成员。Apache Kylin是一个开源的分布式分析引擎,最初由eBay开发贡献至开源社区。它提供Hadoop之上的SQL查询接口及多维分析(OLAP)能力以支持大规模数据,能够处理TB乃至PB级别的分析任务,能够在亚秒级查询巨大的Hive表,并支持高并发。
    Apache Kylin于2014年10月在github开源,并很快在2014年11月加入Apache孵化器,于2015年11月正式毕业成为Apache顶级项目,也成为首个完全由中国团队设计开发的Apache顶级项目。于2016年3月,Apache Kylin核心开发成员创建了Kyligence公司,力求更好地推动项目和社区的快速发展。

1.3 为什么需要Kylin

    在大数据的背景下,Hadoop的出现解决了数据存储问题,但如何对海量数据进行OLAP查询,却一直令人十分头疼。
企业中大数据查询大致分为两种:即席查询和定制查询。
① 即席查询
    Hive、SparkSQL等OLAP引擎,虽然在很大程度上降低了数据分析的难度,但它们都只适用于即席查询的场景。它们的优点是查询灵活,但是随着数据量和计算复杂度的增长,响应时间不能得到保证。
② 定制查询
    多数情况下是对用户的操作做出实时反应,Hive等查询引擎很难满足实时查询,一般只能对数据仓库中的数据进行提前计算,然后将结果存入Mysql等关系型数据库,最后提供给用户进行查询。
    在上述背景下,Apache Kylin应运而生。不同于"大规模并行处理"Hive等架构,Apache Kylin采用"预计算"的模式,用户只需要提前定义好查询维度,Kylin将帮助我们进行计算,并将结果存储到HBase中,为海量数据的查询和分析提供亚秒级返回,是一种典型的"空间换时间"的解决方案。Apache Kylin的出现不仅很好地解决了海量数据快速查询的问题,也避免了手动开发和维护提前计算程序带来的一系列麻烦。

2.核心概念

2.1 数据仓库

    Data Warehouse,简称DW,中文名数据仓库,是商业智能(BI)中的核心部分。主要是将不同数据源的数据整合到一起,通过多维分析等方式为企业提供决策支持和报表生成。
数据仓库与数据库主要区别:用途不同
①、数据库面向事务,而数据仓库面向分析。
②、数据库一般存储在线的业务数据,需要对上层业务的改变做出实时反应,涉及到增删查改等操作,所以需要遵循三大范式,需要ACID。而数据仓库中存储的则主要是历史数据,主要目的是为企业决策提供支持,所以可能存在大量数据冗余,但利于多个维度查询,为决策者提供更多观察视角。
    在传统BI领域中,数据仓库的数据同样存储在Oracle、MySQL等数据库中,而在大数据领域中最常用的数据仓库就是Apache Hive,Hive也是Apache Kylin默认的数据源。

2.2 OLAP与OLTP

    OLAP(Online Analytical Process),联机分析处理,以多维度的方式分析数据,一般带有主观的查询需求,多应用在数据仓库。
    OLTP(Online Transaction Process),联机事务处理,侧重于数据库的增删查改等常用业务操作。

2.3 维度和度量

维度和度量是数据分析领域中两个常用的概念。
简单地说,维度就是观察数据的角度。比如气象站的采集数据,可以从时间的维度来观察:
表格.jpg

也可以从时间和气象站两个角度来观察:
1555654839(1).png

维度一般是离散的值,比如时间维度上的每一个独立的日期,或者气象站维度上的每一个独立的气象站ID。因此统计时可以把维度相同的记录聚合在一起,然后应用聚合函数做累加、均值、最大值、最小值等聚合计算。
度量就是被聚合的统计值,也就是聚合运算的结果,它一般是连续的值,如以上两个图中的温度值,或是其他测量点,比如风速、湿度、降雨量等等。通过对度量的比较和分析,我们就可以对数据做出评估,比如今年平均气温是否在正常范围,某个气象站的平均气温是否明显高于往年平均气温等等。

2.4 Cube和Cuboid

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

1555655083(1).jpg

假设有一个电商的销售数据集,其中维度包括时间(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)的组合:有[Time Item Location][Item Location Supplier][Time Location Supplier][Time Item Supplier]4种。
 最后零维度(0D)和四维度(4D)的组合各有[]和[Time Item Location Supplier]1种。计算Cubiod,即按维度来聚合销售额。如果用SQL语句来表达计算Cuboid [Time, Item],那么SQL语句为:select Time, Item, Sum(GMV) as GMV from Sales group by Time, Item将计算的结果保存为物化视图,所有Cuboid物化视图的总称就是Cube。

2.5 事实表和维度表

事实表(Fact Table)是指存储有事实记录的表,如系统日志、销售记录、用户访问记录等。事实表的记录是动态增长的,所以它的体积通常远大于维度表。
维度表(Dimension Table)或维表,也称为查找表(Lookup Table),是与事实表相对应的一种表。它保存了维度的属性值,可以跟事实表做关联;相当于将事实表上经常重复的属性抽取、规范出来用一张表进行管理。常见的维度表有:日期表(存储与日期对应的周、月、季度等属性)、地区表(包含国家、省/州、城市等属性)等。维度表的变化通常不会太大。
使用维度表有许多好处:
①、缩小了事实表的大小。
②、便于维度的管理和维护,增加、删除和修改维度的属性,不必对事实表的大量记录进行改动。
③、 维度表可以为多个事实表重用。

2.6 星形模型

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

1555655396(1).png

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

3.运行原理

Kylin的核心思想是预计算,即对多维分析可能用到的度量进行预计算,将计算好的结果保存成Cube,供查询时直接访问。把高复杂度的聚合运算、多表连接等操作转换成对预计算结果的查询,这决定了Kylin能够拥有很好的快速查询和高并发能力。

3.1 技术架构

Apache Kylin系统主要可以分为在线查询和离线构建两部分,具体架构图如下:

1555655661(1).png

Kylin提供了一个称作Layer Cubing的算法,来构建Cube。简单来说,就是按照dimension数量从大到小的顺序,从Base Cuboid开始,依次基于上一层Cuboid的结果进行再聚合。每一层的计算都是一个单独的Map Reduce(Spark)任务。
MapReduce的计算结果最终保存到HBase中,HBase中每行记录的Rowkey由dimension组成,
measure会保存在column family中。为了减小存储代价,这里会对dimension和measure进行编码。查询阶段,利用HBase列存储的特性就可以保证Kylin有良好的快速响应和高并发。

3.2 特性

SQL接口

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

支持海量数据集

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

亚秒级响应

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

水平扩展

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

可视化集成

Kylin提供与BI工具的整合能力,如Tableau,PowerBI/Excel,MSTR,QlikSense,Hue和SuperSet。

构建多维立方体(Cube)

用户能够在Kylin里为百亿以上数据集定义数据模型并构建立方体。

4.Kylin服务器模式

Kylin 实例是无状态的,其运行时状态存储在 HBase (由 conf/kylin.properties 中的 kylin.metadata.url 指定) 中的 metadata 中。出于负载均衡的考虑,建议运行多个Kylin 实例共享一个 metadata ,因此他们在表结构中共享同一个状态,比如job 状态, Cube 状态, 等等。
每一个 Kylin 实例在 conf/kylin.properties 中都有一个 “kylin.server.mode” entry,指定了运行时的模式,有 3 个选项:

job : 在实例中运行 job engine; Kylin job engine 管理集群 的 jobs。
query : 只运行 query engine; Kylin query engine 接收和回应你的 SQL 查询。
all : 在实例中既运行 job engine 也运行 query engines。

注意默认情况下只有一个实例可以运行 job engine (“all” 或 “job” 模式), 其它需要是 “query” 模式

5. 企业应用案例

Apache Kylin虽然还很年轻,但已经在多个企业的生产项目中得到了应用。下面我们来看一看Kylin在国内两个著名企业内的应用。
百度地图
大数据计算分析的三大痛点:

1.百亿级海量数据多维指标动态计算耗时问题,Apache Kylin通过预计算生成Cube结果数据集并存储到HBase的方式解决;
2.复杂条件筛选问题,用户查询时,Apache Kylin利用router查找算法及优化的HBase Coprocessor解决;
3.跨月、季度、年等大时间区间查询问题,对于预计算结果的存储,Apache Kylin利用Cube的Data Segment分区存储管理解决。

这3个痛点的解决,使百度地图在百亿级大数据规模下,且数据模型确定的具体多维分析产品中,达到单条SQL毫秒级响应。

2016-12-21 13:51:17 yangbomy 阅读数 2766
  • Kylin大数据实战学习教程

    本课程为专题课,通过全面讲解Kylin架构原理、分布式集群搭建以及项目案例,让你快速掌握Kylin实时大数据BI技术,从而解决海量数据多维指标动态计算耗时问题、复杂条件筛选问题以及跨月、季度、年等大时间区间查询问题。

    990 人正在学习 去看看 易水

一、            思路

大数据OLAP目前主要有ROLAP和MOLAP。目前我们已采用的ROLAP方式组建数据平台,提供了更大的操作灵活性,同时在海量数据的情况下分析计算缓慢。MOLAP 能降低分析和数据库的耦合性,提高处理效率和改善分工,但降低操作灵活性和增加ETL的复杂性。

我们将采用的建模做立方体(MOLAP)的方式改进平台,目前也面临着ETL复杂性问题。

面对MOLAP,大数据处理业界给出来一个比较合适、新兴的方式去解决这个问题,kylin。由于我们需要的不是一个单独的软件而是一个整体解决方案,所以基于kylin 和开源BI 以及CDH hadoop, 做一个全套搭建跑通测试。它能解决:

l  支持大数据多维查询,可秒级返回。

l  使用多维预计算,降低ETL复杂度。

l  使用基数估计算法,可任意维度用户数计算。

 

二、            选型

结果:

Pentaho6.1(saiku3.8.8) + kylin 1.5.4 + CDH5.8

说明:

Saiku 是多维分析软件,使用modrian 多维引擎。Saiku + kylin 有一线公司整合成功的先例。Saiku3.8.8 使用mondrian4,可支持 schema3 和schema4。

Pentaho 是开源BI套件(类比BIEE),支持saiku plugin , 多维引擎mondrian 也由pentaho公司维护。Pentaho7.0是最新版本,但他还没有添加saiku plugin ,所以选择pentaho6.1。pentaho可支持CDH,需要安装相关CDH版本软件包。

Kylin是大数据分析引擎,支持SQL和多维分析。Kylin1.5.4 可支持CDH5.8。

技术架构入下:

三、            Demo说明

选取了11天数据测试,分析2个维度:日期、节目名,3个度量:点播次数,用户数,观看时长。数据处理流程是:处理源数据-> 多维结果数据->应用结果集。

 

数据

位置

使用

处理源数据

CDH 5.8  hive  default.t_vod_daily

Kylin 入口数据

多维结果数据

Kylin1.5.4 (实际  CDH 5.8 hbase)

SQL查询和pentaho多维入口

应用结果集

Pentaho组件(saiku/Jpviot,report,ctool)

业务数据人员使用

 

其中遇到几点问题:

1.      Mondrian Schema选择,目前modrianSchema4 是主流和最新版本,支持物理、属性、展示三层映射。但是未有对应的生成软件,后发现pentaho 也仅仅mondrian schema3 ,所以只能使用mondrian schema3。

2.      CDH driver 问题, pentaho,saiku 可支持 Hive ,Impala 访问,但实际上要按需联入对应driver 才能实现,且支持功能不足够完善。

3.      模型对接,Mondrian schema 3 的模型必须和kylin 建模一模一样,才能保证上层pentaho正常访问。

4.      建模技能和MDX技能。

 

四、            测试结果

数据分析(saiku)能秒级返回,Distinctuserid 有 0.45%的差距, 因为kylin 使用 基数估计算法 ,任何维度的distinct 都可计算。




 

五、            遗留问题

测试需要完善,可能存在mondiran-kylin不支持情况。





2019-12-23 19:24:45 qq_35315256 阅读数 15
  • Kylin大数据实战学习教程

    本课程为专题课,通过全面讲解Kylin架构原理、分布式集群搭建以及项目案例,让你快速掌握Kylin实时大数据BI技术,从而解决海量数据多维指标动态计算耗时问题、复杂条件筛选问题以及跨月、季度、年等大时间区间查询问题。

    990 人正在学习 去看看 易水

apache版本安装

安装 hbase-1.2.11-bin.tar.gz

安装 hive-2.1.0

安装 hadoop-2.6.0-cdh

安装 zookeeper-3.4.12

安装 apache-kylin-2.0.0-bin-hbase1x.tar.gz    注意:cdh环境请下载其他版本

配置下环境变量直接启动即可

 

mysql远程访问

GRANT ALL PRIVILEGES ON hive.* TO 'root'@'%' IDENTIFIED BY '访问密码';
flush privileges;

https://blog.csdn.net/qq_27078095/article/details/56865443 hadoop编译snappy

https://docs.hortonworks.com/HDPDocuments/HDP2/HDP-2.0.6.0/bk_installing_manually_book/content/rpm-chap1-11.html配置yarn文档

=================================================================================

 

企业版 kyligence 安装

官网:https://kyligence.io/zh/

1、安装条件CDH,或者hadoop2.6+hbase1.2+hive2.1或者不用hbase

用mysql

1.在MySQL数据库中新建名为kylin的数据库
2.在Kyligence	Enterprise安装目录下的$KYLIN_HOME/conf/kylin.properties
配置文件中,配置kylin.metadata.url={metadata_name}@jdbc,
{metadata_name}需要替换为您需要的元数据表名,如	kylin_default_instance@jdbc	。
如果该表已存在,则会使用现有的表;如果不存在,则会自动创建该表。
具体示例如下:
kylin.metadata.url=kylin_default_instance@jdbc,url=jdbc:mysql://localhost:3306/kylin,
username=root,password=,maxActi ve=20,maxIdle=20。
如需使用MySQLCluster支持负载均衡时,需要在连接字符串中加入该参数,具体示例如下:
kylin.metadata.url=kylin_default_instance@jdbc,url=jdbc:mysql:loadbalance://host1:port1,
host2:port2/kylin,username=root,password=root,maxActive=20,maxIdle=20	
maxActive:最大数据库连接数,默认值为5	; maxIdle:最大等待中的连接数量,默认值为	5; 
maxWait:最大等待连接毫秒数,默认值为	1000	; 
3.由于元数据不依赖于HBase,所以需要在配置文件	$KYLIN_HOME/conf/kylin.properties中
添加zookeeper的连接项kylin.env.zookeeper-connect-string=host:port	,如kylin.env.zookeeper-connect-string=localhost:2181。
4.如果您需要对JDBC的密码进行加密,请在$KYLIN_HOME/tomcat/webapps/kylin/WEB-INF/lib目录下运行如下命令:
java	-classpath	kap.jar:spring-beans-4.3.10.RELEASE.jar:spring-core-4.3.10.RELEASE.jar:commons-codec-1.7.jar	org.apache.kylin.rest.security.PasswordPlaceholderConfigurer	AES	<your_password>

2、因为独立部署,需要用到hive2的客户端beeline

修改配置文件/opt/kylin/conf/kylin.properties

可以看到关闭了snappy压缩

kylin.source.hive.client=beeline 
kylin.source.hive.beeline-params=-n	root	-u	'jdbc:hive2://host:port'	--hiveconf	hive.exec.compress.output=false	--hive conf	dfs.replication=2		--hiveconf	hive.security.authorization.sqlstd.confwhitelist.append='mapreduce.job.*|dfs.*'

因为我们环境的hadoop没有snappy压缩,所以需要修改

kylin_hive_conf.xml 、kylin_job_conf.xml 、 kylin_job_conf_inmem.xml 这几个文件中的compress,改为false

3、在hdfs上构建2个目录,/kylin  和  /user/hadoop(用户名)

4、配置kylin的环境变量

5、check-env.sh检查环境 , ok ,启动即可 kylin.sh start

 

构建cube的时候可能构建不动,有可能是map reduce的内存小,修改kylin_job的内存,目前是修改为的8G。

注意:hive客户端我是从其他节点copy过来的,因为我们集群有spark,所以hive下有spark的jar,和kylin自带的sparkjar包冲突,删除即可。

================================================================================

kyligence卸载

1、stop kylin,需要备份的备份,metastore.sh backup

2、hdfs上删除/kylin 和 /user/hadoop

3、如果是配置的hbase作为元数据存储,就disable_all命令 禁用“kylin_metadata.*”  和drop_all “kylin_metadata.*”

4、去掉kylin_home,生效环境变量

 

 

=============================使用笔记=================================

 

 

 

 

 

 

 

 

 

 

2016-09-15 18:33:38 BDCHome 阅读数 1213
  • Kylin大数据实战学习教程

    本课程为专题课,通过全面讲解Kylin架构原理、分布式集群搭建以及项目案例,让你快速掌握Kylin实时大数据BI技术,从而解决海量数据多维指标动态计算耗时问题、复杂条件筛选问题以及跨月、季度、年等大时间区间查询问题。

    990 人正在学习 去看看 易水

Apache Kylin 大数据时代的OLAP利器

1. OLAP简介

 

OLAP的历史与基本概念

 

OLAP全称为在线联机分析应用,是一种对于多维数据分析查询的解决方案。典型的OLAP应用场景包括销售、市场、管理等商务报表,预算决算,经济报表等等。

最早的OLAP查询工具是发布于1970年的Express,然而完整的OLAP概念是在1993年由关系数据库之父EdgarF.Codd 提出,伴随而来的是著名的“twelvelaws of online analytical processing”. 1998年微软发布MicrosoftAnalysis Services,并且在早一年通过OLE DB for OLAP API引入MDX查询语言,2001年微软和Hyperion发布的XML forAnalysis 成为了事实上的OLAP查询标准。如今,MDX已成为与SQL旗鼓相当的OLAP 查询语言,被各家OLAP厂商先后支持。

OLAPCube是一种典型的多维数据分析技术,Cube本身可以认为是不同维度数据组成的dataset,一个OLAP Cube 可以拥有多个维度(Dimension),以及多个事实(Factor Measure)。用户通过OLAP工具从多个角度来进行数据的多维分析。通常认为OLAP包括三种基本的分析操作:上卷(rollup)、下钻(drilldown)、切片切块(slicingand dicing),原始数据经过聚合以及整理后变成一个或多个维度的视图。

 

ROLAP和MOLAP

 

传统OLAP根据数据存储方式的不同分为ROLAP(Relational OLAP)以及MOLAP(Multi-dimensionOLAP)

ROLAP 以关系模型的方式存储用作多维分析用的数据,优点在于存储体积小,查询方式灵活,然而缺点也显而易见,每次查询都需要对数据进行聚合计算,为了改善短板,ROLAP使用了列存、并行查询、查询优化、位图索引等技术

MOLAP 将分析用的数据物理上存储为多维数组的形式,形成CUBE结构。维度的属性值映射成多维数组的下标或者下标范围,事实以多维数组的值存储在数组单元中,优势是查询快速,缺点是数据量不容易控制,可能会出现维度爆炸的问题。

 

大数据时代OLAP的挑战

 

近二十年内,ROLAP技术随着MPP并行数据库技术的发展,尤其是列存技术的支持下,实现了分析能力大幅度的跨越提升,同时伴随着内存成本的进一步降低,单节点内存扩展性增强,集群单节点的查询性能实现了飞跃,内存数据库的实用性跨上了一个新台阶,这些技术进步共同作用的结果是类似的技术基本覆盖了TB级别的数据分析需求。 Hadoop以及相关大数据技术的出现提供了一个几近无限扩展的数据平台,在相关技术的支持下,各个应用的数据已突破了传统OLAP所能支持的容量上界。每天千万、数亿条的数据,提供若干维度的分析模型,大数据OLAP最迫切所要解决的问题就是大量实时运算导致的响应时间迟滞。

 

2. Apache Kylin 大数据下的OLAP解决方案

 

Apache Kylin的背景

 

Apache Kylin 是一个Hadoop生态圈下的MOLAP系统,是eBay大数据部门从2014年开始研发并开源的支持TB到PB级别数据量的分布式OLAP分析引擎。其特点包括:

 

  • 可扩展的超快的OLAP引擎
  • 提供ANSI-SQL接口
  • 交互式查询能力
  • MOLAP Cube 的概念
  • 与BI工具可无缝整合

 

Apache Kylin典型的应用场景如下:

  • 用户数据存在于Hadoop HDFS中,利用Hive将HDFS文件数据以关系数据方式存取,数据量巨大,在500G以上
  • 每天有数G甚至数十G的数据增量导入
  • 有10个左右为固定的分析维度

 

ApacheKylin的核心思想是利用空间换时间,由于查询方面制定了多种灵活的策略,进一步提高空间的利用率,使得这样的平衡策略在应用中是值得采用的。

 

Apache Kylin的总体架构

 

Apache Kylin 作为一个OLAP引擎完成了从数据源抓取数据,ETL到自己的存储引擎,提供REST服务等一系列工作,其架构如图所示:

kylin_diagram

Apache Kylin 的生态圈包括:

  • Kylin Core: Kylin 引擎的框架,查询、任务、以及存储引擎都集中于此,除此之外还包括一个REST 服务器来响应各种客户端请求。
  • 扩展插件: 各种提供额外特性的插件,如安全认证、SSO等
  • 完整性组件: Job管理器,ETL、监控以及报警
  • 交互界面: 基于Kylin Core之上的用户交互界面
  • 驱动: 提供了JDBC以及ODBC的连接方式

 

Apache kylin Cube 多维数据的计算

 

Apache Kylin的多维计算主要是体现在OLAPCube的计算。Cube由多个Cuboid组合而成,Cuboid上的数据是原始数据聚合的数据,因此创建Cube可以看作是在原始数据导入时做的一个预计算预处理的过程。Kylin的强大之处在于充分利用了Hadoop的MapReduce并行处理的能力,高效处理导入的数据。

Apache Kylin的数据来自于Hive,并作为一个Hive的加速器希望最终的查询SQL类似于直接在Hive上查询。因此Kylin在建立Cube的时候需要从Hive获取Hive表的元数据。虽然有建立Cube的过程,但是并不想对普通的查询用户暴露Cube的存在。

 

Apache Kylin创建Cube的过程如下图所示:

Snip20151130_1

  1. 根据Cube定义的事实表以及维度表,利用Hive创建一张宽表
  2. 抽取事实表上的维度的distinct值,将事实表上的维度以字典树方式压缩编码成目录,将维度表以字典树的方式编码
  3. 利用MapReduce从第一步得到的宽表文件作为输入,创建 N-Dimension cuboid,然后每次根据前一步的结果串行生成 N-1 cuboid, N-2 cuboid … 0-Cuboid
  4. 根据生成的Cuboid数据量计算HTable的Region分割策略,创建HTable,将HFile导入进来

 

Apache Kylin与传统的OLAP一样,无法应对数据Update的情况(更新数据会导致Cube的失效,需要重建整个Cube)。面对每天甚至每两个小时这样固定周期的增量数据,Kylin使用了一种增量Cubing技术来进行快速响应。

Apache Kylin的Cube可以根据时间段划分成多个Segment。在Cube第一次Build完成之后会有一个Segment,在每次增量Build后会产生一个新的Segment。增量Cubing依赖已有的CubeSegments和增量的原始数据。增量Cubing的步骤和新建 Cube的步骤类似,Segment之间以时间段进行区分。

增量Cubing所需要面对的原始数据量更小,因此增量Cubing的速度是非常快的。然而随着CubeSegments的数目增加,一定程度上会影响到查询的进行,所以在Segments数目到一定数量后可能需要进行CubeSegments的合并操作,实际上MergeCube是合成了一个新的大的CubeSegment来替代,Merge操作是一个异步的在线操作,不会对前端的查询业务产生影响。

合并操作步骤如下:

  1. 遍历指定的Cube Segment
  2. 合并维度字典目录和维度表快照
  3. 利用MapReduce合并他们的 N-Dimension cuboid
  4. 将cuboid转换成HFile,生成新的HTable,替代原有的多个HTable

 

Apache Kylin对传统MOLAP的改进

 

计算Cube的存储代价以及计算代价都是比较大的, 传统OLAP的维度爆炸的问题Kylin也一样会遇到。 Kylin提供给用户一些优化措施,在一定程度上能降低维度爆炸的问题:

 

  1. Cube 优化:
  • Hierachy Dimension
  • Derived Dimension
  • Aggregation Group

 

Hierachy Dimension, 一系列具有层次关系的Dimension组成一个Hierachy, 比如年、月、日组成了一个Hierachy, 在Cube中,如果不设置Hierarchy, 会有 年、月、日、年月、年日、月日 6个cuboid, 但是设置了Hierarchy之后Cuboid增加了一个约束,希望低Level的Dimension一定要伴随高Level的Dimension 一起出现。设置了Hierachy Dimension 能使得需要计算的维度组合减少一半。

Derived Dimension, 如果在某张维度表上有多个维度,那么可以将其设置为Derived Dimension, 在Kylin内部会将其统一用维度表的主键来替换,以此来达到降低维度组合的数目,当然在一定程度上Derived Dimension 会降低查询效率,在查询时,Kylin使用维度表主键进行聚合后,再通过主键和真正维度列的映射关系做一次转换,在Kylin内部再对结果集做一次聚合后返回给用户

Aggregation Group, 这是一个将维度进行分组,以求达到降低维度组合数目的手段。不同分组的维度之间组成的Cuboid数量会大大降低,维度组合从2的(k+m+n)次幂至多能降低到 2的k次幂加2的m次幂加2的n次幂。Group的优化措施与查询SQL紧密依赖,可以说是为了查询的定制优化。 如果查询的维度是夸Group的,那么Kylin需要以较大的代价从N-Cuboid中聚合得到所需要的查询结果,这需要Cube构建人员在建模时仔细地斟酌。

  1. 数据压缩:

Apache Kylin针对维度字典以及维度表快照采用了特殊的压缩算法,对于Hbase中的聚合计算数据利用了Hadoop的LZO或者是Snappy,从而保证存储在Hbase以及内存中的数据尽可能的小。其中维度字典以及维度表快照的压缩考虑到DataCube中会出现非常多的重复的维度成员值,最直接的处理方式就是利用数据字典的方式将维度值映射成ID, Kylin中采用了Trie树的方式对维度值进行编码

  1. distinct count聚合查询优化:

Apache Kylin 采用了HypeLogLog的方式来计算DistinctCount。好处是速度快,缺点是结果是一个近似值,会有一定的误差。在非计费等通常的场景下DistinctCount的统计误差应用普遍可以接受。

具体的算法可见Paper,本文不再赘述:

http://algo.inria.fr/flajolet/Publications/FlFuGaMe07.pdf

 

Apache kylin SQL查询的实现

 

ANSI SQL查询是Apache Kylin 非常明显的优势。Kylin的SQL语法解析依赖于另一个开源数据管理框架 ApacheCalcite, Calcite即之前的Optiq,是一个没有存储模块的数据库,即不管理数据存储、不包含数据处理的算法,不包含元信息的存储。因此它非常适合来做一个应用到存储引擎之间的中间层。在Calcite的基础之上只要为存储引擎写一个专用的适配器(Adapter)即可形成一个功能丰富的支持DML甚至DDL的“类数据库”。

Kylin完成了一个定制的Adapter,在Calcite完成SQL解析,形成语法树(AST)之后,由Kylin定义语法树各个节点的执行规则来进行查询。Calcite在遍历语法树节点后生成一个Kylin描述查询模型的Digest, Kylin会为此Digest去判断是否有匹配的Cube。如果有与查询匹配的Cube,即选择一个查询代价最小的Cube进行查询(KylinCube的查询代价计算目前是一个开放接口,可以根据维度数目,可以根据数据量大小来计算Cost)

Kylin目前的多维数据存储引擎是HBase, Kylin利用了HBase的Coprocessor机制在HBase的RegionServer完成部分聚合以及全部过滤操作,在HbaseScan时提前进行计算,利用HBase多个Region Server的计算能力加速Kylin的SQL查询。目前Kylin仍然有部分查询语法不支持,特别是过滤器Where部分的约束较多、对SQL有一定的要求,但是如果有针对性的对Coprocessor部分进行改造相信SQL兼容度可以有大幅的提升。

 

Apache kylin 与 RTOLAP

 

ApacheKylin 可以说是与市面上流行的Presto、SparkSQL、Impala等直接在原始数据上查询的系统(暂且归于RTOLAP)走了一条完全不同的道路。前者在如何快速求得预计算结果,以及优化查询解析使得更多的查询能用上预计算结果方面在优化。后续Kylin的版本会改进预计算引擎,优化预计算速度,使得Kylin可以变成一个近似实时的分析引擎。而像Presto,SparkSQL等是着重于优化查询数据的过程环节,像一些其它的数据仓库一样,使用列存、压缩、并行查询等技术,优化查询。这种方案的好处就在于扩展性强、能适配更广泛的查询。但是在查询速度上,可以说Apache Kylin 要比ROLAP 至少快上一个数量级,所以对与查询响应时间要求较高的应用,ApacheKylin是最好的选择。

 

3. Apache Kylin在网易

 

Kylin服务化

 

在网易,Apache Kylin作为大数据平台的OLAP查询模块,可以为公司的各种分析类需求以及应用提供服务。所有数据存在Hadoop Hive 上的数据都能够通过Kylin OLAP 引擎进行加速查询。在公司内部Kylin作为一个统一平台,与各产品的数据仓库进行接驳。

目前Kylin的部署架构如下:

kylin

Kylin集群由多个查询节点以及控制节点组成。 控制节点唯一,负责集群项目、任务调度与Cube增删查改。 多个查询节点前用Nginx做负载均衡,后段节点可按需水平扩容。前端可同时支持JDBC与ODBC的客户端查询。

 

Kylin性能表现

 

在Kylin上线前,我们选取了公司内部原有的一些报表业务进行过性能对比,对比内容在相同的数据下、Kylin查询与Mondrian 结合Oracle的查询比较。

测试结果通过数据量较大的DataStream报表来进行比较:

7fef9022-e62f-412d-8bc3-a25030dd2740

再看Kylin的吞吐量,利用Haproxy进行请求转发后随着Kylin服务器的增加吞吐量的表现:

aedfd2e0-a5c4-4c37-986c-f4b96c1596f3

 

网易对Kylin的改进

 

原生的社区版Aapche Kylin 是需要部署在一个统一底层的Hadoop、Hive、HBase集群之上的。而网易内部的大数据平台由于各种原因,分为了多个Hadoop集群、各应用会在不同的Hadoop集群上建立Hive数据仓库。最原始而自然的想法就是在每一个Hadoop环境上部署一套Kylin服务来满足不同的需求,但是集群资源管理、计算资源调度、管理运维的复杂性都会是一个比较突出的问题。例如用户数据在A机房的Hive上,而A机房的Hadoop集群并没有足够的计算资源来保证KylinOLAP的高效运行。因此根据公司内部实际的大数据平台分布情况及机房建设情况,将Kylin打造成一个公司内统一的服务平台是一个更好的选择。OLAP小组对开源版本的Kylin进行了二次开发,并将改进补丁提交给了社区并受到了积极反馈。

目前的改进主要包括:

  • Kylin对Kerberos认证的支持
  • Kylin非Hadoop节点的部署支持
  • 多数据源的支持

 

在公司内,由于性能以及安全性方面的考量,不同部门的应用会搭建各自的Hive进行数据分析,并且由于公司内还没有跨机房的Hadoop集群,因此会出现用户数据在A地方的Hive上,而A机房的Hadoop集群并没有足够的计算资源来保证KylinOLAP的高效运行。

综合分析现实的场景之后,我们选择了公司内最大的hadoop集群作为KylinOLAP的计算引擎集群,保证有充足的存储以及计算资源。 HBase采用一个独立的集群,避免Hbase查询和Hadoop集群任务之间的互相干扰。数据源Hive允许用户自定义,目前已支持同Hadoop集群下不同Hive 以及不同Hadoop集群下的不同Hive节点使用KylinOLAP服务。根据用户数据仓库的实际配置情况可能会出现跨集群的数据源抽取计算,由于公司同城机房有专线网络,数据仓库Hive里的源数据量也远小于Kylin实际的聚合后的数据存储(存于Hbase,数据量大小一般为数据源Hive中的10倍以上),因此可认为这样的开销可以认为带来的影响不大,并且在我们的测试中得到了印证。

 

Kylin OLAP与猛犸以及有数的结合

 

猛犸是网易内部的统一大数据入口平台,为了让Kylin更快更好的融入到大平台中,OLAP小组已计划在不久之后全面与猛犸大数据平台进行打通和整合, Kylin OLAP将深度内嵌于猛犸,用户可以基于猛犸平台完成KylinOLAP的简化管理工作。猛犸平台对接控制节点,作为专业数据建模师的操作入口

  • Kylin将利用猛犸的用户管理功能
  • 猛犸将接管用户项目的创建以及Cube的管理
  • 猛犸将原有的Hive数据源彻底与Kylin打通,便于Kylin管理用户的数据源

Kylin原生的用户管理是基于LDAP的,如果不使用LDAP服务需要利用SpringSecurity重新开发一套,网易的内部的猛犸大数据平台有一套成熟且完善的用户权限访问控制体系,因此可以利用现成的机制对Kylin的访问、修改做保护性的限制。

Kylin的Data Cube建模,特别是一些高级的Cube优化功能如RowKey顺序、维度分组、分层等需要较高的学习成本,所以认为不适合让一般的数据分析师来直接操作,我们设计了一套简化版的Cube 建模流程,以用户申请——运维审批的方式进行数据的接入。

有数是网易内部重要的报表分析平台,有数将KylinOLAP作为一个单独的数据源进行支持。已有的以及潜在的Hive查询客户可以轻松的将报表迁移到KylinOLAP,使得大数据量下的交互式报表分析成为可能。

  • 有数能基于在猛犸上创建的Cube创建报表
  • 有数主动识别Kylin Cube定义的维度和度量
  • 用户在Kylin OLAP允许的范围内自由操作,完成报表的编辑和查询。

与有数结合后的Kylin 查询结果可以用更多更丰富的图表的方式展示给数据分析人员:

Snip20160102_1


http://www.bitstech.net/2016/01/04/kylin-olap/


没有更多推荐了,返回首页