二、kylin优化

目录

 

1、为什么要优化

2、从哪些方面去优化

3、根据业务需求减少子Cube数目

4、避免高基维度参与太多维度组合

5、优化Hbase-RowKey,提高查询效率

6、其他优化方法

 

1、为什么要优化

(1)kylin主要通过空间换时间的方式来提高查询性能,但是如果cube的所有子cube(2的n次方-1 个)都构建出来,会占用很多计算和存储资源,并且很多子cube的数据根本就不会被查询到,所以要根据查询需求减少不必要的子cube的构建。

(2)如果某个cube组合为A(基数3)、B(基数5)、C(基数1200000)构建ABC组合时,产生的数据量是3*5*1200000,所以要根据业务需求尽量减少高基维度在子cube中出现的次数。

(3)kylin默认选择的存储引擎是Hbase,所以rowKey的设计与Hbase的查询效率密切相关。

2、从哪些方面去优化

Kylin数据膨胀原因:构建了许多不必要的子Cube(维度组合)

优化:

(1)根据业务需求减少子Cube数目

(2)避免高基维度参与太多维度组合

(3)优化Hbase-RowKey,提高查询效率

3、根据业务需求减少子Cube数目

使用衍生维度

衍生维度用于在有效维度内将维度表上的非主键维度排除掉,并使用维度表的主键(其实是事实表上相应的外键)来替代它们,就是把能通过事实表的外键推断出来的维度排除掉,不参与Cube的维度组合,外键的基数不宜太高,不然影响查询性能

聚合组

用户根据自己关注的维度组合,可以划分出自己关注的组合大类,这些大类在 Apache Kylin 里面被称为聚合组。例如维度为A、B、C、D的Cube,如果用户仅仅关注维度 AB 组合和维度 CD 组合,那么该 Cube 则可以被分化成两个聚合组,分别是聚合组 AB 和聚合组 CD。如图 下图 所示,生成的 Cuboid 数目从 15 个缩减成了 7个。聚合组之间产生相同组合kylin只会构建一次

假设创建一个交易数据的 Cube,它包含了以下一些维度:顾客 ID buyer_id 交易日期 cal_dt、付款的方式 pay_type 和买家所在的城市 city。有时候,分析师需要通过分组聚合 city、cal_dt 和 pay_type 来获知不同消费方式在不同城市的应用情况;有时候,分析师需要通过聚合 city 、cal_dt 和 buyer_id,来查看顾客在不同城市的消费行为。在上述的实例中,推荐建立两个聚合组

在聚合组中进一步减少维度的方法

每个聚合组中可以通过设置强制维度、联合维度、层级维度来减少不必要的维度组合,进而减少构建时的工作量和提高数据查询性能。

    1. 强制维度(Mandatory),如果一个维度被定义为强制维度,那么这个分组产生的所有Cuboid中每一个Cuboid都会包含该维度。每个分组中都可以有0个、1个或多个强制维度。如果根据这个分组的业务逻辑,则相关的查询一定会在过滤条件或分组条件中,因此可以在该分组中把该维度设置为强制维度。
    2. 层级维度(Hierarchy),每个层级包含两个或更多个维度。假设一个层级中包含D1,D2…Dn这n个维度,那么在该分组产生的任何Cuboid中,这n个维度只会以(),(D1),(D1,D2)…(D1,D2…Dn)这n+1种形式中的一种出现。每个分组中可以有0个、1个或多个层级,不同的层级之间不应当有共享的维度。如果根据这个分组的业务逻辑,则多个维度直接存在层级关系,因此可以在该分组中把这些维度设置为层级维度。
    3. 联合维度(Joint),每个联合中包含两个或更多个维度,如果某些列形成一个联合,那么在该分组产生的任何Cuboid中,这些联合维度要么一起出现,要么都不出现。每个分组中可以有0个或多个联合,但是不同的联合之间不应当有共享的维度(否则它们可以合并成一个联合)。如果根据这个分组的业务逻辑,多个维度在查询中总是同时出现,则可以在该分组中把这些维度设置为联合维度。

4、避免高基维度参与太多维度组合

这个方法跟业务紧密相关,比如用户ID一般基数比较大,如果要计算符合某个条件的用户数,最好将其作为(count distinct)度量。如果需要用到用户维表中的某个维度进行查询,这个维度不宜作为衍生维度,更适合为正常维度。

5、优化Hbase-RowKey,提高查询效率

可以参考这篇文章:http://www.whitewood.me/2017/09/24/Kylin%E5%AE%9E%E6%88%98%EF%BC%88%E5%9B%9B%EF%BC%89%EF%BC%9Arowkey%E8%B0%83%E4%BC%98/

6、其他优化方法

通过命令查看Cube的维度组合数目和数据量。

/kylin.sh org.apache.kylin.engine.mr.common.CubeStatsReader  CubeName

通过kylin的dashboard功能统计慢查询sql,对某个Cube针对性优化。

关于kylin其他文章:

一、kylin简介

二、kylin优化

三、kylin读写分离部署

 

最重要的事情:检验是否有人看我的博客,检验是否有人看我的博客、检验是否有人看我的博客

https://i-blog.csdnimg.cn/blog_migrate/a7ddb1899c7d687ac3c926c25a57e548.png

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值