Kylin

为什么需要Kylin?

Hadoop帮助我们解决了海量数据的存储。

早期使用Hadoop的MapReduce计算模型,太慢了,只能做离线计算,无法做实时计算与迭代式计算。

Spark应运而生,并带动了Scala语言的发展,Spark的MapReduce计算模型比Hadoop的MapReduce计算模型性能提升了数十倍。

在现今的企业发展中,数据的增量是每日以百MB、G为单位的增长,面对如此之大的规模性数据增长,及运营成本、硬件成本、响应速度等各方面影响下,Spark也够呛。

在这种情况下,企业查询一般分为即席查询和定制查询。

即席查询:Hive、SparkSQL等OLAP引擎,虽然在一定程度上降低了数据分析的难度,但他们只用于即席查询的场景,优点就是用户根据自己的需求,自定义、灵活的选择查询条件,与普通查询最大的区别在于普通查询时根据应用定制的开发查询条件,但随着数据量和计算复杂度的增长,响应数据无法得到保证

实时查询:多数情况下是对用户的操作做出实时反应,Hive等查询引擎很难满足实时查询,一般只能对数据库中的数据进行提取计算,然后将结果存入MySQL等关系型数据库,最后提供给用户进行查询,随着后面海量数据的递增,这种方式的代价很大

Kylin不同于大规模并行处理的Hive等架构,Kylin是预计算的模式,我们提前定义好查询的维度,Kylin就会帮助我们进行计算,并将结果存储到Hbase,当我们在去查询海量数据和分析时,提供亚秒级返回。

Kylin很明显采用的是空间换时间的策略,先将定义好的各个字段进行交叉查询,将这些查询好的数据放到数据库中,当我们去查询时这个时候数据量也少了,如果查询语句和预计算的语句是一样的,那样则可以直接返回,因此Kylin查询速度很快。

阅读以下内容前,请先阅读:https://blog.csdn.net/Su_Levi_Wei/article/details/89501304

什么是Kylin?

Apache Kylin(Extend OLAP Engine For Big Data)中文名为麒麟,是Hadoop生态圈的重要成员,是一个开源的分布式分析引擎,最初是由eBay开发的,提供了Hadoop之上的SQL查询接口及多维分析(OLAP)功能,支持高并发处理TB至PB级别的大规模海量数据,能够在亚秒级查询巨大的Hive表。

Kylin在2014年10月在Github开源,2014年11月加入Apache,2015年11月成为顶级项目,也是第一个完全由中国团队设计开发的Apache顶级项目,2016年3月Kylin核心开发成员成立了Kyligence公司来推动项目和社区的发展。

Cube & Cuboid

Cube可以说是Kylin的核心,Kylin就是通过构建Cube,进而达到亚秒级的海量数据搜索。

在构建Cube前,要先进行数据仓库的设计和架构,进而确定好要分析维度和指标(度量),根据定义好的维度和指标(度量)就可以构建Cube了。

Cube是对于一个给定的数据模型的所有维度进行组合、计算。

对于N个维度来说,组合的可能性共有2的N次方,对于每一种维度的组合,将指标(度量)做聚合计算。

其中每一种维度组合称为Cubeid,一个Cubeid包含一种具体维度组合下所有指标的值。

如下图,是一个四维的Cube构建过程。

假设有一个点上的销售数据集,其中的维度包括时间、商品、地点、供应商四个维度,指标为销售额,那么所有维度的组合就有2的4次方,刚好对应下图。

如果提前计算好,那么在写SQL连表操作时,一下子就出来结果了。

Cube & Cuboid构建过程

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

进而Kylin提供了一个称为Layer Cubing的算法来构建Cube,这个算法是按照维度(Dimension)数量从大到小的顺序,从Base Cuboid开始,依次给予上一层的结果进行再次聚合,每一层的计算都是一个单独的MapReduce任务。

这里面的Map和Reduce还是比较简单的,Mapper以上一层Cuboid的结果作为输入,由于Key是由各维度值拼接在一起,从其中找出要聚合的维度,去掉它的值成新的Key,并对Value进行操作,然后把新Key和Value输出,进而对所有新Key进行排序,洗牌(Shuffle),再Reduce,Reduce的输入是一组有相同Key的Value集合,对这些Value做聚合计算,再结合Key输出就完成了一轮计算。

每一轮的计算都是一个MapReduce任务,而且是串行执行,一个N维的Cube,至少需要N次MapReduce Job。

Kylin是把MapReduce的计算结果最终保存在HBase中,对于跨度查询(年、季度、月等)Kylin是使用Cube的Data Segment分区存储管理解决。

而HBase中每行记录的RowKey由维度(Dimension)组成,Cuboid的指标会保存在Column Family中映射为Value,为了减少存储的代价,这里会对维度和指标进行编码。

查询阶段利用HBase列存储的特性就可以保证Kylin有良好的快速响应和高并发。

Kylin技术架构

数据源

Kylin支持多种数据源,默认的数据源是Hive。

存储引擎

Kylin采用预计算的方式,默认的预计算结果存储引擎是HBase。

REST Server

REST Server是一条面向应用程序开发的入口点,此类应用程序可以提供查询、获取结果、触发Cube构建任务、获取元数据及用户权限等,还可以通过Restful接口实现SQL查询。

Query Engine(查询引擎)

当Cube准备就绪后,查询引擎能够获取并解析用户查询的语句,并与其他组件交互,返回用户对应的结果。

Routing(路由)

将解析SQL生成的执行计划转为Cube缓存查询,Cube通过预计算缓存在HBase中,用户查询时,利用router查询算法和优化的HBase Coprocessor解决。

Metadata(元数据)

管理保存在Kylin中的所有元数据,包括Cube元数据,其他的组件都是以此为基础,Kylin的技术元数据和业务元数据都是存储在HBase的。

Cube Build Engine(任务引擎)

处理并协调所有离线任务,包括Shell脚本、JavaApi、MapReduc任务等。

Cube 三种构建

Kylin Cube构建分为三种,全量构建、增量构建、流式构建。

全量构建:每次都对Hive表进行全表构建,但这种构建方式在实际环境中并不常用,只有在初始化时用的较多,因为大多数业务场景下,事实表的数据是不断的增长的。

增量构建:使得Cube每次只构建Hive表中新增的部分数据,而不是全部数据,因此降低了构建成本,Kylin将Cube分为多个Segment,每个Segment用起始时间和结束时间来标识。

增量构建的方式解决了业务数据动态增长的问题,但是却不能满足分钟级近实时返回结果的需求,因为增量构建他们使用的是Hive作为数据量,Hive中的数据由ETL定时导入(如每天一次),数据的时效性对于数据价值的重要性不言而喻。

增量构建和全量构建的区别:

1.创建Model时需要制定Partition Date Column(分区日期数据列),用日期对Cube进行分割。

2.创建Cube时需要制定Partition Start Date,即Cube默认的第一个Segemnt的起始时间。

官方文档:http://kylin.apache.org/docs20/tutorial/create_cube.html

http://kylin.apache.org/docs20/tutorial/cube_build_job.html

流式构建:为了解决数据实时增长的问题,流式构建使用Kafka作为数据源,构建引擎定时从Kafka中拉取数据进行构建,这个设计和Spark Streaming的定时微批次很类似,这个是在Kylin 1.6版本后存在的。

Kylin特性

SQL接口

Kylin主要对外的接口是以SQL的形式提供的,SQL简单易用的特性极大的降低了Kylin的学习成本。

支持海量数据集

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

亚秒级响应

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

水平扩展

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

可视化集成

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

构建多维立方体(Cube)

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

Kylin服务器模式

Kylin实例是无状态的,运行时状态(元数据)是存储在HBase(由conf/kylin.properties中的kylin.metadata.url指定)中的metadata中,因此在表结构中共享统一个状态(job状态,Cube状态等)。

每一个Kylin实例在conf/kylin.properties中都有一个Kylin.server.mode entry,指定运行时的模式。

job:在实例运行中job engine负责管理集群中的jobs

query:只运行query engine,负责接收和回应SQL查询。

all:在实例中即运行job engine,也可以运行query engines。

注:默认情况下只有一个实例可以运行job engine(all或job模式),其余需要query模式,类似Master/Slave模式。

Kylin操作

Kylin是需要依赖Hive和HBase的。

民生流量池的项目也是用JDBC连接Kylin发送SQL做操作的。

原文地址:https://www.cnblogs.com/-levi/p/11401878.html

时间: 2024-07-28 15:09:23

Kylin的相关文章

OLAP引擎——Kylin介绍

Kylin是ebay开发的一套OLAP系统,与Mondrian不同的是,它是一个MOLAP系统,主要用于支持大数据生态圈的数据分析业务,它主要是通过预计算的方式将用户设定的多维立方体缓存到HBase中(目前还仅支持hbase),这段时间对mondrian和kylin都进行了使用,发现这两个系统是时间和空间的一个权衡吧,mondrian是一个ROLAP系统,所有的查询可以通过实时的数据库查询完成,而不会有任何的预计算,大大节约了存储空间的要求(但是会有查询结果的缓存,目前是缓存在程序内存中,很容易

解决kylin build cube第一步报错:java.lang.NullPointerException

报错栈: 2017-06-19 10:27:35,757 ERROR [pool-9-thread-4] threadpool.DefaultScheduler:140 : ExecuteException job:933bc47a-302c-48fa-8ec9-ae8730057175 org.apache.kylin.job.exception.ExecuteException: org.apache.kylin.job.exception.ExecuteException: java.la

解决用户自生成meta导入kylin后报错问题Can not deserialize instance of java.lang.String[] out of VALUE_STRING token

报错栈: 2017-06-22 20:48:07,101 ERROR [http-bio-7070-exec-5] cube.CubeManager:947 : Error during load cube instance, skipping : /cube/energon_dm_admission_record_fact_01.json java.lang.IllegalStateException: Failed to init CubeDescManager from [email pr

【总结】Kylin创建Cube

根据上篇文章Kylin创建Model之后,创建Cube 第一步,Cube Info 填写Cube基本信息 第二步,Dimensions 第三步,Measures 第四步,Refresh Setting Auto Merge Thresholds :自动合并阈值,按天增加的segement,每7天合并一次:7天的segment每28天合并一次 Retention Threshold:默认为0,保留历史所有的segment(hotelinfo每个分区都是全量数据,所以此处只保留一天的数据) Part

Android源码浅析(一)——VMware Workstation Pro和Ubuntu Kylin 16.04 LTS安装配置

Android源码浅析(一)--VMware Workstation Pro和Ubuntu Kylin 16.04 LTS安装配置 最近地方工作,就是接触源码的东西了,所以好东西还是要分享,系列开了这么多,完结 的也没几个,主要还是自己覆盖的太广了,却又不精通,嘿嘿,工作需要,所以写下了本篇博客 一.VMware 12 我选择的虚拟机试VMware,挺好用的感觉,下载VMware就不说了,善用搜索键嘛,这里我提供一个我现在在用的 下载地址:链接:http://pan.baidu.com/s/1k

虚拟机装ubuntu (kylin) 时常遇问题

在想保留Windows操作系统的同时还能用Linux进行学习和开发,安装双系统或安装虚拟机都是不错的选择,依个人情况而定. (P.S:此行留给后期会写的双系统博客) 这篇文章收集了自己在用VMware workstaion 12安装Ubuntu kylin 15.10 64bit光盘时遇到的一些问题及百度后整理出的解决方案,若还有什么问题没有归纳,有望拍砖,携手完善. 1.虚拟化技术被禁用 在新建好虚拟机后第一次运行时可能弹出上图的提示框,大致意思为: 您已经配置此虚拟机使用64位客户操作系统.

ubuntu kylin 14.04安装配置redis-2.8.9(转)

1.下载安装文件加压.编译和安装 cd /tmpwget http://download.redis.io/releases/redis-2.8.9.tar.gztar -zxf redis-2.8.9.tar.gzcd redis-2.8.9makesudo make install 这时Redis 的可执行文件被放到了/usr/local/bin 2.下载配置文件和init启动脚本:wget https://github.com/ijonas/dotfiles/raw/master/etc/

kylin 使用RESTful API 请求

目前根据Kylin的官方文档介绍,Kylin的认证是basic authentication,加密算法是Base64,在POST的header进行用户认证我使用的用户和密码是(格式:username:password) :ADMIN:KYLIN 使用Base64编码后结果为:QURNSU46S1lMSU4=1.在Linux环境下     curl -c cookiefile.txt -X POST -H "Authorization: Basic QURNSU46S1lMSU4="-H

Ubuntu Kylin 14.04 安装配置 jdk、eclipse、tomcat 通用

一.安装jdk 1)首先去sun官网下载jdk http://www.oracle.com/technetwork/java/javase/downloads/index.html 注意下载的是tar.gz结尾的文件,例如:jdk-7u21-linux-i586.tar.gz 2)下载之后,打开终端使用命令进行解压: sudo tar -zxvf jdk-7u21-linux-i586.tar.gz 回车后需要输入登陆密码,注意输入的密码是看不到的,你输入后回车就行 我下载的jdk是:jdk-7

Ubuntu Kylin 14.04LTS 开机后卡在登陆界面,可以进入字符界面,或者登陆后鼠标不显示但是管用

2014年4月27日,距离中期检查还有七天,基本上什么也没做,特别着急,雨已经下了快一天了,中午用美团外卖定的黄焖排骨,MD,什么玩意,那么一点点就18块钱,一看就不值五块钱,发誓再也不吃,最重要的是订完两个半小时才送到,饿过劲了都 吐槽一下Ubuntu 的谷歌输入法,真是不符合国人习惯 刚刚整好这个毛病,有种致之死地而后生的狂喜 ubuntu今天上午关机去win7,买了个东西回来就没法开机了,开机后卡在登陆界面,鼠标不能动,好不容易鼠标能动了,也能输入密码了,结果进去之后又卡住了,不显示桌面,