一、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;
传统方法:需要扫描所有的记录,再找到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优化
--其他优化