kylin总结(一些重要概念以及基础优化)

Apache Kylin 是Hadoop大数据平台的一个开源OLAP引擎。采用多位立方体预计算技术,可以将大数据SQL查询速度达到亚秒级别。其实就是数据立方的一种实现,可以参考韩家伟的《数据挖掘·概念与技术》里面对数据立方有详细介绍。

简单来说数据立方就是以空间换时间,通过定义一系列的纬度,对每个纬度的组合进行预先计算并存储。有N个纬度,就会有2的N次种组合。所以最好控制好纬度的数量,因为存储量会随着纬度的增加爆炸式的增长。后面文章会写下cube的总结(假装有链接)。

1. 强制维度:如果一个维度被定义为强制维度,那么这个分组产生的所有cuboid中每一个cuboid都会包含这个维度。

2.层级维度:假设一个层级中包含d1,d2,...dn这n个维度,那么该分组产生的任何cuboid中,这n个维度只会以(),(d1),(d1,d2)....(d1,d2,....dn)这n+1种形式中的一种出现。

1.Date 三字节 

2.Time 四字节

3.Integer 需要提供“length”来代表需要多少个字节

4.Dict 会为该维度创建一个字典,适合基数小且长度较大情况

5.fixed-length

  1. 几个重要的概念:

    维度:观察数据的角度,数据库中的一个属性。(如时间,地区,商品id)

    度量:度量就是被聚合的统计值。(如count,sum)

    纬度的基数(cardinality):该纬度在数据集中出现不同值的个数。

    事实表(Fact Table):真正存储数据的表

    维度表(dimension table)

  2. kylin只支持星型模型,即一张事实表对应多张纬度表
  3. 一般用外键建立映射关系
  4. 创建方式有:全量构建,增量构建,流式构建
  5. 剪枝优化的工具有:使用聚合组,使用衍生维度
  6. 聚合组:假设一个cube所有的维度均可以根据业务需求划分成若干组,由于同一组内维度更可能同时被同一个查询用到,因此会表现出更加紧密的内在联系。对于每个分组内部的维度,用户可以使用如下三种方式定义他们之间的关系:
  7. 衍生维度(derived):某些维度(如周)是可以从其他维度推导而来,设为衍生维度不会在cube中直接存在,而是具体计算,利用时间换空间。
  8. rowkey优化:最终存储到hbase的数据,rowkey和值,rowkey由各个维度拼接而成,数据就是度量。所以用得多的维度尽量放到前面,基数高的维度,如果查询会有这个维度的过滤,则向前调
  9. 编码:
  10. 按维度分片:默认情况下分片(region)策略是随机的,我们无法控制哪些行会被分到同一个分片中。这种策略能够提高提取的并发程度,但是仍然有优化空间。按维度分片提供了一种更加高效的分片策略,简单地说,如果cuboid中某两行的shard by dimension的值相同,那么无论这个cuboid最终会被划分成多少个分片,这两行数据必然会被分配到同一个分片中。
  11. 度量精度:当业务可以接受较低的一些精度时,可以对度量精度进行配置以优化,减少占用空间和运行开销。
  12. 并发粒度优化:当segment中某个cuboid大小超过一定阈值时,系统会将该cuboid的数据分片到多个分区中,以实现cuboid数据读取的并行化,从而优化查询速度。参数: kylin.hbase.region.out ,也可以设范围:kylin.hbase.region.out.min和kylin.hbase.region.out.max
  13. 可扩展性。1.3版本以前kylin极度依赖于hive,mr,hbase。1.5版本后对接口进行了剥离,利用适配器模式可以修改数据源,计算引擎,存储。

 

 

你可能感兴趣的:(kylin)