秒查超大数据OLAP数据库Kylin

一、kylin意义

    1、解决了基于超大数据量的OLAP(在线分析处理)困境

        •支持超大数据量(设计目标是千亿记录级别,有生产实例)

        •查询时间性能真正实现了O(1)

        •交互式分析能力增强,亚秒级的响应adhoc查询

    2、中国人主导的顶级开源项目,麒麟是第一个完全由中国人团队主导的开源项目,意义非凡。

二、核心三原理及性能

1.技术说明

    1:预计算!(丧失一些灵活性,固定的维度和指标)

    2:数据量无关的查询速度!(预计算时间会长一些)

举个例子:使用如下的SQL来查询10月1日那天销量最高的商品:

select item,sum(sell_amount) from sell_details where sell_date='2021-10-01' group by item order by sum(sell_amount) desc;     

扫描二维码关注公众号,回复: 15601428 查看本文章

传统方法:需要扫描所有的记录,再找到10月1日的销售记录,然后按商品聚合销售额,最后排序返回。假如10月1日有1亿条交易,那么查询必须读取并累计至少1亿条记录,且这个查询速度会随将来销量的增加而逐步下降。如果日交易量提高一倍到2亿,那么查询执行的时间可能也会增加一倍。

    Kylin:在空闲时间里按维度[sell_date,item]计算sum(sell_amount)并存储下来,在查询时找到10月1日的销售商品就可以直接排序返回了。读取的记录数最大不会超过维度[sell_date,item]的组合数。

2.工作原理

Apache Kylin的工作原理本质上是MOLAP(Multidimensional OnlineAnalytical Processing)Cube,也就是多维立方体分析。

具体做法:

1)指定数据模型,定义维度和度量。

2)预计算Cube,计算所有Cuboid并保存为物化视图。

3)执行查询时,读取Cuboid,运算,产生查询结果。

由于维度增长相对于原始数据量的增长几乎可以不计,因此性能不受影响。

3.技术架构


 4.主要特点:

•支持SQL接口   •支持超大数据集   •秒级响应   •可伸缩性   •高吞吐率   •BI工具集成

 

 

 三、基础使用

 1.数据准备

    注:以下实现细节仅基于1.5版本。大部分都傻瓜式GUI操作,上手容易。

    •准备hive数据表

    •使用星形模型数据表

    •规范维度表的设计

    •Hive表建立时间分区

    •调查维度基数的分布(Cardinality)

 2.cube设计

•导入hive表定义(可自动计算基数)

•创建数据模型

•创建cube

    --可以设置维度聚合组(几个相关维度为一组)减少计算cuboid的量

    --为维度增加mandatory属性可以省略不含此维度的计算量•--设置Hicrarchy属性,可以让有层级关系的低层次维度查询的时候省略不满层次关系的cuboid,加快查询(如国家,省,市)

    --联合维度。两种情况:1,总是一起查询的维度;2,基数非常低的维度。

    -- Key-Value的方式将Cube存储到HBase中。Key即维度的值进行拼接,使用字典(Dictionary)编码技术,节省存储。另外还有整数编码,固定长度编码等技术。

    --维度在rowkey中的顺序原则:越常用越前排(缩小扫描范围)

    --参数配置。 Kylin全局的参数值可在conf/kylin.properties文件中进行配置,也可以某个cube中单独覆盖设置。

 3.cube创建与刷新

Cube定义好了还不能用,要做实际的计算,也就是构建。过程如下:

•1)创建临时的Hive平表(从Hive读取数据)。

•2)计算各维度的不同值,并收集各Cuboid的统计数据。

•3)创建并保存字典。

•4)保存Cuboid统计信息。

•5)创建HTable。

•6)计算Cube(一轮或若干轮MapReduce)。

•7)将Cube的计算结果转成HFile。

•8)加载HFile到HBase。

•9)更新Cube元数据。

•10)垃圾回收。

 4.cube查询与使用

  •web可视化,通用SQL查询,非常简单

  •只支持查询,必须是select语句。因为kylin本身就是只用来查询的。

  •Zeppelin集成

  •多种数据接口

 5.其它

  •增量构建,须合理安排

  •流式构建(对大规模的实时数据进行cube建立)

  •基数膨胀,维度组合膨胀

 四、优化原则

Kylin优化目的:cube体积小,查询快。

诊断:•检查cuboid数量  •检查膨胀率。

一般有以下优化原则:

1.减少维度组合(对业务熟练)

2.合理选择字典编码(尤其注意高基数维度)

3.合理rowkey排列(仅针对hbase)

4.时间与空间的平衡(存储大小,构建时间,要求响应时间) 

    --理解basecuboid(包含所有维度的cuboid能处理所有查询)

    --cuboid剪枝优化(衍生维度,聚合组)

    --消灭高基数维度导致的cuboid

    --并发粒度优化

    --RowKey优化

--其他优化

 

猜你喜欢

转载自blog.csdn.net/changlina_1989/article/details/124411330