![如何在kylin中构建一个cube_第1张图片](http1://img.it610.com/image/info5/02924bc066284db8b2235e9a25c81db1.jpg)
前面的文章介绍了Apache Kylin的安装及数据仓库里面的星型和雪花模型的概念,这篇文章我们来看下,如何构建一个kylin的cube进行查询。这里不得不吐槽一下Kylin的资料,少之又少出现问题网上基本找不到解决方案,所以想要学习kylin,建议大家买一本书系统的学习一下,这里推荐一本入门的书《基于Apache kylin构建大数据分析平台》,介绍的还可以。
下面来看下如何构建一个cube:
首先,我们要明白kylin的数据源主要来自Hive里面的各种表,如果想要进行测试,那么首先我们要在hive中有自己的表,注意,表的类型基本有两种,一种是事实表,一种是维度表,kylin使用的是星型模型,通常一个事实表会关联多个维度表,表的数据有了,下面就是通过kylin的ui界面来完成整个流程。除此之外keylin还支持从kafka构建流式表,由于使用场景比较少,这里就不讨论这个了。
下面通过一张图看下整个构建cube的操作流程:
![如何在kylin中构建一个cube_第2张图片](http1://img.it610.com/image/info5/cacc07044f024311ade3c5e7ea42d608.jpg)
(1) 登录7070端口下面的kylin的web管理页面,默认的用户名是KYLIN密码是ADMIN
![如何在kylin中构建一个cube_第3张图片](http1://img.it610.com/image/info5/829321ea8a884736adc8efc261cbaa2d.jpg)
(2)点击左上角的加号小按钮,新建一个工程
![如何在kylin中构建一个cube_第4张图片](http1://img.it610.com/image/info5/7bcc331a84af47e8ab43d1f9c3d6c4e3.jpg)
(3)选择这个工程,然后点击model面板,并点击Data Source面板,选择配置hive数据源,并加载需要用到的表同步到kylin里面
![如何在kylin中构建一个cube_第5张图片](http1://img.it610.com/image/info5/1f70a781040e4fa3811a4a57164584e6.jpg)
![如何在kylin中构建一个cube_第6张图片](http1://img.it610.com/image/info5/898c13a67f104747a02953cfd99442e9.jpg)
(4)点击Models,开始设计model,这个步骤主要是基础加工,配置一个事实表和多个维表以及他们的关联条件,和需要统计的维度和度量
![如何在kylin中构建一个cube_第7张图片](http1://img.it610.com/image/info5/1555a97ffbd54896a3c250d6438c36b3.jpg)
(5)设计cube
![如何在kylin中构建一个cube_第8张图片](http1://img.it610.com/image/info5/2b9c14f6c03f4ba88189493ae087159a.jpg)
![如何在kylin中构建一个cube_第9张图片](http1://img.it610.com/image/info5/d0bc15cd750f49cd884a0da8c23eaeb2.jpg)
(6)构建cube
![如何在kylin中构建一个cube_第10张图片](http1://img.it610.com/image/info5/12390fb57f704b19ab2425d908dbc98a.jpg)
(7)查看cule的构建进度
![如何在kylin中构建一个cube_第11张图片](http1://img.it610.com/image/info5/70e31cf356044d89ae7b0a9adf7329bc.jpg)
(8)最后查询cule数据
![如何在kylin中构建一个cube_第12张图片](http1://img.it610.com/image/info5/8614798b7c8148228f20c80083107f04.jpg)
至此一整个的cuble构建流程完事,整体步骤还是比较多的,当然里面有一些步骤并没有说的那么详细,此外设计cuble的步骤有一些高级配置,对优化查询有着比较重要的作用,这块现在还没太深入,这个demo只是让我们有一个整体的认识,如果对高级的设计感兴趣的朋友可以看kylin的官网文档。
Kylin的本质是基于空间换时间的策略来实现亚秒级的查询,本身只是一个Server,充分利用了Hadoop+Hive来把结果集数据预构建到Hbase里来优化提高查询效率。所以想要使用Kylin必须保证你的Hadoop,Hive,Hbase已经安装,并且能正常使用。
构建cube的本质,其实就是把各种可能用到的查询,聚合,统计提前预计算好,然后按规则写入hbase,这样在查询的时候,基于rowkey的查询响应速度非常快,而且随着数据量的增大,查询响应时间基本是个常量,虽然查询很快,但是离线使用MapReduce来预构建cube的过程确实非常之慢,另外一个缺点是单kylin的server并发非常低,根据我们的测试也就40左右,大家可能有疑问,hbase本身支持的并发是非常强大的为什么到了kylin这里就这么低,其实kylin server服务不仅仅只是查询hbase的结果返回给前端,大部分时候都需要在server的内存里做各种运算,比如分页,排序,聚合等,所以如果大并发量一旦瞬间上来可把kylin server所在的tomcat的jvm内存给耗尽,最终导致任务失败或者服务挂掉。所以kylin的定位是给产品或者运营使用的大数据OLAP查询引擎,如果并发量比较高的业务,使用kylin一直要提前测试好,根据并发情况多部署几个kylin server服务。
总结:
总体来说,对于一些字段数固定且不经常改变schema的大表数据,采用kylin来进行OLAP查询是非常适合的,性能也不错,但是如果scheam经常变换,统计的维度和度量也可能变换这种场景是不太适合用kylin来解决的,可以尝试ES或者SOLR来分析,最后需要注意的事kylin的并发支持并不太好,非常高并发的查询服务,一定要严格测试后,多部署几个kylin server且做好读写分离,提交任务的server集群和查询server集群分开部署。
有什么问题可以扫码关注微信公众号:我是攻城师(woshigcs),在后台留言咨询。
技术债不能欠,健康债更不能欠, 求道之路,与君同行。
![如何在kylin中构建一个cube_第13张图片](http1://img.it610.com/image/product/8a9eb23c049a4da08976db25e91241bc.jpg)