kylin是什么

在进行数据分析时,随着数据量的提升,处理时间基本也是线性增长。kylin是一个预处理框架,它将一些预先定义的复杂分析预先完成并进行存储,预处理完成后,再次进行请求时,kylin可以进行亚秒级别的响应。

它是一个分析型数据仓库(也是OLAP引擎),为Hadoop提供标准SQL支持大部分查询功能

可以接入kafka等实时流处理数据,从而可以在妙极延迟下进行实时数据等多维分析。

处理引擎可以选用MapReduce和Spark。

于BI工具无缝整合,可以接入Tableau,PowerBI/Excel,SuperSet等可视化分析工具。

我总结出来的观点呢就是:当我们的数据量非常大之后,每次查询都需要花费很多时间,这时我们将查询结果缓存起来,后面查询从这个缓存里面查询速度就会非常快。在kylin中,将结果缓存到hbase表中。

这里需要预先设置一些维度和度量,所以说适合一些固定报表等一些维度固定的场景,如果说维度的组合太多或者变化很频繁,可能不是很适用。

kylin中的一些概念

kylin中需要设置维度和度量

维度和度量这些名词在我之前没有接触到,所以这里我解释一下这两个名词的意思:

维度:我们对数据进行分析时要从各个角度来进行分析,这个时候每一个角度,在sql中的group by字段就是一个维度。

度量:当我们有了维度之后,我们肯定是要分析某一个值的,在sql中 select 的这个字段,这个值就是度量。

举个例子:分析这个班级下男生女生的平均身高是多少,这个时候的sql语句大致是这样写:SELECT avg(height),sex FROM student WHERE class = ? GROUP BY sex。这条sql语句得到的结果就是,这个班级下男生女生的平均身高。这里的维度就是性别,度量就是身高。

datasource,model,cube

datasource: 顾名思义,就是数据源,由于kylin是部署在hadoop之上的,所以我们存储的hive表,在这里都能查询到,我们选择一个表导入即可。

model: 分析的一个模型,选择事实表,维度表。以及设置它们的关联关系,选择要分析的维度和度量。

​ 还可以添加filter条件,只拿到我们想要的数据

​ 这里还有一个设置:data partition field,这个字段是后面cube 构建时查询源数据的时间字段。

cube:从model中出来的一个更加具体的内容,这个是最终会进行构建的模块,cube中有一些设置

  • 更新设置

    这里经常会更改的值有两个:Auto Merge Thresholds 和 Volatile Range。

    首先来说明一下kylin中cube构建的一些限制:例如当我们构建了一个起止时间为[7.1-7.4)这一个时间的cube之后,我们无法进行构建[7.2-7.5)这个区间的cube。因为中间有重叠区域。但是这种情况下我们可以构建[7.1-7.5)这个时间范围内的cube。

    构建出来的数据会存储到hive中,它将每一个时间范围存储为一张表,当我们构建的区间多了之后,用于存储的表也会变多,而我们每个时间范围可能会很小,kylin为了节省存储空间,所以将它们整合成一张表。

    auto merge thresholds

    用于设置当我们的小表超过多少后会合并成一张大表。

    例如我们每天构建一个cube,每次的时间范围都是[今天,明天),auto merge thresholds设置为7,28.

    则当7天之后,之前的cube会合并成一周大小的间隔,当28天之后会合并成一个更大的时间范围,合并检测是从大到小来进行检测的,如果检测到有满足28天的则会先进行合并,之后在进行检测7天。

    volatile range

    这个是意思是,设置一个offset,这个时间内的数据不会被计算到auto merge范围内,auto merge setting以上面的为例,如果 volatile range设置为2,则9天后会将 9~2这一周的数据合并成一周大小。

  • 高级设置

    这个部分是对cube进行优化

    当我们有很多的维度,维度组合之后就会有2^n^中组合方式,很容易产生组合爆炸的情况。我们需要对其进行剪枝。

    这里拿一个选项来举例:

    Hierarchy Dimensions: 层级维度,例如 “国家” -> “省” -> “市” 是一个层级;不符合此层级关系的 cuboid 可以被跳过计算。

job

构建job才会真正的去数据源拉取数据。构建完成后会将结果存储到hive表中。

可以在ui页面上的Monitor栏上看到我们之前构建的cube。

API

kylin对外暴漏了一些api,我们可以通过调用api来完成一些自动化的构建流程。

有一个需要注意的点是,通过api构建cube时,这个cube的状态必须时ready的,也就是说我们必须在ui上提前构建一次。

总结

kylin是一个大数据量分析时进行一些固定维度的提前预计算,对于一些维度不固定的情况还是不太适用。

它的原理是将数据进行计算后缓存,后面再需要这个数据时,可以不再去源数据进行分析,而是从kylin里面获取,这样就可以节省时间。