Kylin Cube构建优化

联机分析处理OLAP是一种软件技术,它使分析人员能够迅速、一致、交互地从各个方面观察信息,以达到
深入理解数据的目的。

多维数据组织OLAP的使用一般有两种背景条件:
Ø 查询需求一般是统计结果,为数据经过聚合函数计算得到的统计值,并非直接面向原始数据,访问原始记录的频率也不那么高。
Ø 聚合是按照维度进行的,一般业务需求可控,维度聚合有限,不会随着数据膨胀而迅速增长。

Apache Kylin介绍
Apache Kylin(以下简称Kylin)是一个开源的、分布式的分析型数据仓库,提供Hadoop/Spark 之上的 SQL 查询接口及多维分析(OLAP)能力以支持超大规模数据。

Kylin除了传统大数据分析的大规模并行处理和列式存储之外,还对数据进行了预计算处理,从而大幅减少了在 Hadoop/Spark上百亿规模数据查询延迟,达到秒级甚至亚秒级响应。

Kylin大致处理分三步,如下:

1定义数据集上的一个星形或雪花形模型
2在定义的数据表上构建Cube
3使用标准 SQL 通过 ODBC、JDBC 或 RESTFUL API 进行查询

此文主要叙述第2步、第3步中涉及的Cube构建、查询性能优化等内容。

1.Cube优化项概述
当模型(Model)建立好后,Cube的构建与生成将是最耗时的部分,可对此部分进行优化。

理论上我们知道,N个维度将会产生2^n个排列组合,因此,可对Cube进行剪枝降维等操作降低其复杂度,从而改善Cube的生成时间和查询响应。

1.1 Hierarchies
利用层级维度降低组合复杂度,比如当省、市、区不设置为hierarchy dimension时,理论的组合数目有2^3个,
group by province
group by province, city
group by province, city, district
可见,经过hierarchy设定,由2^3降至3个组合。

1.2 Mandatory
当查询中都存在GROUP BY某些维度,则可以把这些维度配置为必要维度。

Mandatory Dimensions是在每次查询都会用到的维度,比如下图中A如果为Mandatory dimension,则与B、C总共构成了4个cuboid,相较于之前的cuboid(2的3次方,8)减少了一半。

1.3 Rowkeys
Kylin中的RowKey由shard id + cuboid id + dimension values三部分组成,其中shard id有两个字节,cuboid有八个字节,dimension values为各个维度值经过编码后的值。

dict:
默认dict编码字段基数只有5000000,dict字典适用中低基维度,如地区信息,国家、省份、城市等。

fixed_length:
固定长度N存储维度值,超过长度部分会截断,fixed_length适用高基维场景,如电话号码,IP等。

1.4 Shard By
Rowkeys最多可为一个维度配置Shard By值为true。

Cube在构建过程中需要将中间表的数据分布到HDFS节点,默认partition方式是随机。如果指定分片维度,则使用分片维度做partition。partition的目的是防止中间表大小差异造成数据倾斜,因此Shard By维度应该使用高基维度,以使分片粒度足够小,能够加速计算任务。

1.5 Advanced Dictionaries
Global Dictionary
通常用以支持任意粒度的聚合,精确去重(count_distinct)需保存明细数据,使用Bitmap保存精确去重度量数据。Kylin所用RoaringBitmap仅支持Int类型的数据,所以引入了全局字典,以保证在不同Segment上,String到Int的映射一致。

1.6 Derived Columns
当一个或多个维度能够从另一个维度(一般为事实表的外键)推导出来,可以考虑将这个列设置为派生列。派生列不会参与Cube计算。

假设我们有一个lookup table,将事实表连接起来,条件为“where DimA=DimX”。请注意,在Kylin中,如果选择了FK维度,则相应的PK字段将自动被查询,而不会产生任何额外的花销。

Fact table
(joins)
Lookup Table
column1,column2, DimA(FK)

DimX(PK),DimB, DimC

1.7 Aggregations group
根据关注的维度组合,划分出组合大类,在 Apache Kylin 里面被称为聚合组。例如下图中展示的 Cube,如果用户仅仅关注维度 AB 组合和维度 CD 组合,那么该 Cube 则可以被分化成两个聚合组,分别是聚合组 AB 和聚合组 CD。如图 所示,生成的 Cuboid 数目从 16 个缩减成了 8 个。

2.优化方法
2.1 减少组合
通过构建cube时对维度在joint、Hierarchy参数上的配置减少cuboid的组合数量。
joint参数配置:把所有的id(主键)与对应的信息进行组合。
Hierarchies参数配置:把可以级联查询的维度可能放在里面。

经过削减组合的cuboid物化视图类似如下:
图片2.2 对输出进行压缩配置
压缩算法:snappy or gzip,可节省大量存储空间

2.3 构建过程与时间分配
了解每个过程与大致的时间分配会使后续的优化手段更具效果,通常构建cube的时间分配如下:

2.4 通过设置聚合组(Aggregations group)来提高查询时的命中率
设置一个聚合组和设置3个聚合组的情况对比:3个聚合组相对1个聚合组在构建cube时花费的时间多了3%,存储容量多了0.6%,但是查询性能要更好。

2.5 通过参数设置优化构建时间与查询响应
Hbase的分区数:kylin.storge.hbase.min-region.count
将该参数数量适当提升后,可大幅提高复杂查询的响应时间
yarn.nodemanager.resource.memorg-mb=15 GB
yarn.nodemanager.resource.cpu-vcores=8 cores
由mr引擎构建的cube,适当设置该参数可缩短构建时间

欢迎CIO交流
关于Kylin Cube构建优化还有很多手段和技巧,如果您有经验想要分享,欢迎关注未名企鹅公众号,订阅极客栏目,或者点击文末左下角“阅读原文”给我们留言提出您的需求建议。

关于未名企鹅

未名企鹅以“连接健康”为使命,致力于提供生命健康领域的大数据产品和解决方案,帮助客户实现数据驱动的业务增长。

未名企鹅中的“未名”代表北大,寓意人文精神,生命健康领域正是体现人文关怀的产业;“企鹅”象征科技,未名企鹅的创始团队毕业于北大,技术力量来自腾讯,公司以未名企鹅命名是希望以人文情怀加上科技力量来推动生命科学行业数字化发展。

未名企鹅极客 | Kylin Cube构建优化(上)相关推荐

  1. 未名企鹅极客 | 医药流向的数据仓库建模

    关于医药流向数据,在实际处理的过程当中涉及到数据仓库的建模.未名企鹅的研发工程师Lee在此提供一些建模的思路和心得.首先我们来熟悉一些概念和定义解释. 01 什么是数据建模? 数据建模,就是设计数据的 ...

  2. 未名企鹅极客 | 医药数据管理中的短文本高效匹配技术

    大量行业数据.渠道流向数据在清洗的过程中,面临着诸多极大耗费人力的问题.在数据来源多样且格式不统一的情况下,人工匹配曾让很多信息员闻之色变.即使在人工智能和机器学习的时代下,由于各种原因导致的匹配误差 ...

  3. 未名企鹅极客 | 人机图灵测试中数字图像处理方法研究

    1 背景 CAPTCHA的英文全称为Completely Automated Public Turing Test to Tell Computers and Humans Apart,译为" ...

  4. ​未名企鹅极客 | 流向处理新技术

    未名企鹅做为医药产业互联网和大数据解决方案专家,在帮助企业客户处理流向数据的过程不可避免的要面对如何处理大量的数据问题.虽然说数据处理一个老话题,但是时代在变化,技术在进化,解决的问题思路也需要与时俱 ...

  5. Kylin Cube构建优化

    Kylin Cube构建优 一:使用衍生维度(derived dimension) 衍生维度用于在有效维度内将维度表上的非主键维度排除掉,并使用维度表的主键(其实是事实表上相应的外键)来替代它们.Ky ...

  6. 【电商数仓】数仓即席查询之Kylin Cube构建原理和构建优化

    文章目录 一 Kylin Cube构建原理 1 维度和度量 2 Cube和Cuboid 3 Cube构建算法 (1)逐层构建算法(layer) (2)快速构建算法(inmem) 4 Cube存储原理 ...

  7. 用一根网线颠覆传统教育,这名计算机极客如何变成了数学教父,拒绝10个亿?...

    点击上方"程序员大咖",选择"置顶公众号" 关键时刻,第一时间送达! 来源:51CTO官微 程序员大咖整理发布,转载请联系作者获得授权 在这个金钱至上的年代,他 ...

  8. 4个小例子告诉你:如何成为一名数据极客

    对于数据岗位的员工,互联网公司颇有些不同的称谓,像统计工程师.大数据工程师.数据分析师.算法工程师.数据科学家等,每一种之间的技能差距简直是风马牛不相及.但我觉得,数据岗位的需求千变万化,真正能通过数 ...

  9. 少儿编程python课程-选好课程很重要,极客晨星让孩子喜欢上少儿编程

    近年来国家对编程教育的重视度逐年提升,推动中国少儿编程教育,提升青少年科学素养.国际视野,普及科学技术正在成为当代教育新的方向. 那么,学编程究竟有什么好处呢? 1.提高孩子学习成绩 根据国外权威机构 ...

最新文章

  1. 云计算的新界面—Kubernetes容器技术
  2. 两人团队项目-石家庄地铁查询系统(web版)
  3. 某考试 T2 Tree
  4. redis 类型、方法
  5. 怎样让VB6程序只能运行一次
  6. PyTorch 1.8版本!正式支持AMD GPU
  7. mac下载百度网盘文件限速_百度网盘限速怎么办 (20200412 )
  8. java -cp命令使用
  9. eigen3.3.4安装笔记
  10. Python发布 - distutils简单使用
  11. 全网首发:JDK绘制文字系列博文汇总
  12. 适用于低配机器,从USB摄像头拉H264流的Qt播放器
  13. 重学java——倒叙遍历
  14. Kubernetes 亲和性与反亲和性
  15. android oreo 老机型,三年的老机型,一加手机1也有安卓8.0了!
  16. Psoc Creator入门——EZI2C 通信
  17. 多核cpu是并发还是并行_多核CPU及其带来的并发更改
  18. hadoop个人总结
  19. 联想微型计算机如何设置u盘启动,联想电脑如何设置U盘启动?联想电脑bios设置U盘启动教程...
  20. 2017年总结(补全)

热门文章

  1. Oracle-1 - :超级适合初学者的入门级笔记,CRUD,事务,约束 ......
  2. Tikz作图教程:pgfplots宏包—三维数据散点图,完美重构文献美图
  3. 为了防止别人非法使用计算机可以通过,[单选] 为了防止别人非法使用计算机,可以通过为计算机设置口令()。...
  4. HCIA基础知识(1)
  5. php基础(7)_运算符
  6. 无线传感网的MAC层协议
  7. 1312:【例3.4】昆虫繁殖(递推算法)
  8. 国嵌,够欠!---ARM在线教育误区
  9. Nextjs从入坑到发疯,开发起来太抓狂
  10. RK3399平台开发系列讲解(内存篇)15.29、物理内存管理