简介:
Apache Kylin™是一个开源的分布式分析引擎,提供Hadoop/Spark之上的SQL查询接口及多维分析(OLAP)能力以支持超大规模数据,最初由eBay Inc.开发并贡献至开源社区。它能在亚秒内查询巨大的Hive表;
kylin架构:
从这张架构图上我们可以看出,kylin不需要集群,kylin只是把Hadoop中的溢写技术整合,把结果存到hbase中,我们部署kylin的时候只需要一台节点就行了,注意:当kylin的client端查询并发量比较大的时候,我们也是搭建集群模式来扩展读的能力;
Kylin的工作原理:
本质上是MOLAP(Multidimensional Online Analytical Processing)Cube,也就是多维立方体分析。kylin的核心思想就是预计算,即对多维分析可能用到的度量进行预计算,将计算好的结果保存成cube并存储到hbase中,供查询时直接使用,把高复杂度的聚合运算,多表连接等操作转换成对预计算结果的查询,这决定了kylin具有很好的快速查询和高并发能力;
hadoop/hive:kylin是一个MOLAP系统,将hive中的数据进行预计算,利用MR或者SPARK来进行实现,所以与计算的过程还是很慢的;
HBase:kylin用来存储OLAP分析的cube数据的地方,实现多维数据集的交互式查询
rest server:提供restful接口
query engine:使用开源的calcite框架实现sql的解析,是sql引擎层
routing:负责将解析生成的执行计划转换层cube缓存的查询
metadata:kylin中大部分元数据信息的存储
cube build engine:负责kylin预计算中创建cube
Kylin中专业名词解释:
事实表:用来记录具体事件的,包含每个事件的具体要素以及具体发生 的事情
维表:对事实表中事件的要素的描述信息
维度:观察数据的角度
度量:被聚合的统计值
cuboid:维度的任意组合
cube:所有的维度组合,包含所有的cuboid
多维数据分析模型:
(1):星型模型:一种多维的数据关系,由一张或多张事实表和一组维度表组成,所有的维表都直接连接到事实表上;
(2):雪花模型:当由一个维表和多个维表没有直接连接到事实表,而是通过其他维表连接到事实表;
Cube构建流程:
(1):构建一个中间平表(Hive Table):将Model中的fact表和look up表构建成一个大的Flat Hive Table。
(2):重新分配Flat Hive Tables。
(3):从事实表中抽取维度的Distinct值。
(4):对所有维度表进行压缩编码,生成维度字典。
(5):计算和统计所有的维度组合,并保存,其中,每一种维度组合,称为一个Cuboid。
(6):创建HTable。
(7):构建最基础的Cuboid数据。
(8):利用算法构建N维到0维的Cuboid数据。
(9):构建Cube。
(10):将Cuboid数据转换成HFile。
(11):将HFile直接加载到HBase Table中。
(12):更新Cube信息。
(13):清理Hive。
kylin部署:
kylin的部署有两种方式:
1、单实例部署:在hadoop集群的一个节点上部署,然后启动即可。
部署特点:简单快捷,但是如果并发请求比较多(QPS>50),单台会成为瓶颈。
注意:必须启动mapreduce历史日志服务器:在kylin节点的hadoop的配置文件中的yarn-site.xml文件添加如下配置:
启动kylin之前需要把hadoop生态圈的东西,启动,Hdfs,yarn,Hbase,Hive,zookeeper,JobHistoryServer启动;
JobHistoryServer启动命令:mr-jobhistory-daemon.sh start historyserver
2、集群部署:
集群模式只需要增加kylin的节点数,因为kylin的元数据是存储在hbase中的,只要在kylin中配置,保证每个kylin的节点能访问到同一份元数据即可(kylin.metadata.url相同),并且集群中只有一个运行任务引擎,其他实例都是查询引擎。kylin的集群模式还可以使用LB(nginx),实现访问请求的负载均衡
安装完成之后,kylin的bin目录如下所示:
kylin启动命令:kylin.sh start;
kylin停止命令:kylin.sh stop;
其中sample.sh是自带的一个测试脚本,我们可以运行一下,直接sample.sh,运行时会检查各种环境,出现如下界面表示成功;
Kylin使用教程:包括很多如下图;