kylin简介
kylin介绍
Apache Kylin is an open source Distributed Analytics Engine designed to provide SQL interface and multi-dimensional analysis (OLAP) on Hadoop/Spark supporting extremely large datasets, original contributed from eBay Inc.
Apache Kylin lets you query massive data set at sub-second latency in 3 steps.
1 Identify a Star/Snowflake Schema on Hadoop.
2 Build Cube from the identified tables.
3 Query with ANSI-SQL and get results in sub-second, via ODBC, JDBC or RESTful API.
kylin 是一个开源的分布式分析引擎,被设计成用来对海量数据在Hadoop/Spark之上提供sql接口和多维度查询(OLAP)
Kylin能让你查询海量数据并在秒级的延迟之内的延迟返回通过一下3步:
- 在hadoop定义schema
- 从定义的表中构建cube
- 通过sql查询然后在秒级的时间返回结果,类似odbc,jdbc。
把官网文档翻译一下大概知道这个东西干嘛的了,当然可以看出有点吹牛逼。能在秒级的时间返回海量数据的查询计算结果,你当我傻啊,反正我不信,它不是用spark/hadoop作为计算引擎么,启动个任务都不止这点时间。那他怎么做到的呢,总不能光吹牛吧。光吹牛是要向全国人民谢罪的哈哈。
秒级的响应怎么来的
空间换时间咯
先把需要计算的结果的先给你算好,放在那,等你要查询时,直接从数据库拿就行咯。你可能又会想,kylin怎么知道我要查询哪些数据,难道把所有可能都算一遍,没那么傻吧,也划不来,那他怎么做的呢
kylin空间换时间的策略
几个概念理一下:借助一个手机销量sale表来理解,sale表的字段有(year,city,brand,count):可以理解为某一个品牌手机在某一个国家某一年的销量
- dimension,维度 ,上面例子,维度是year,city,brand
- measure ,量度,上面便是count
好了,比如针对这张表,kylin是如何做预处理计算。
首先kylin根据维度组合出所有维度可能,比如<year,brand>的组合表示这某一年该品牌的销量(类似小米手机在2018卖了多少台,ps:小米手机还是良心价哈),其他的组合也类似。这所有的组合被称为cube,所以你的预处理需要的计算大小和这个cube有关,cube 的维度怎么设定很关键。
然后根据维度计算,这么多维度,你会怎么计算。仔细想想,如果我把<year,city,brand>(这个维度又叫base cuboid)这维度计算好,剩下的维度(cuboid)是不是可以通过它累加就可以啦。
比如,我先算了小米手机2019在中国,在美国,在德国。。。的销量,那么我累积起来是不是就得到了小米手机2019的总销量,是不是得到的这个二维维度<year,brand>的一个取值。好了,其他的是不是都一样啦。所以kylin就是这么做的。
当然,一个优秀的框架肯定还有其他的优化的。 好了,数据计算策略知道了,那它怎么实现呢?
kylin计算引擎
文档介绍kylin提供两种计算引擎,spark/mapreduce,提供一种可插拔的机制,想要那个就用哪个,至于这两个的区别,大家应该心知肚明吧,这里就不说了。这里以mapreduce举例,kylin通过上面的策略生成map任务和ruduce任务提交到mapreduce上运行,返回的计算结果保存到hbase中,用户查询时直接从hbase中读取就可以啦,秒级的返回就是这么来的。
本篇先做个简单介绍,日后深入使用后再来更新。
因为喜欢,所以坚持。