Kylin构建Cube算法
Kylin中Cube的思想是用空间换时间, 通过预先的计算,把索引及结果存储起来,以换取查询时候的高性能。在Kylin v1.5以前,Kylin中的Cube只有一种算法:layered cubing,也称逐层算法,它是逐层由底向上,把所有组合算完的过程。Kylin v1.5以后,推出Fast Cubing,也称快速数据立方算法,是一个新的Cube算法。
(资料图)
一、layered cubing
1、基于MR
这个算法的对cube的计算就像它的名字一样是按layer进行的。
以一个n维cube(即事实表有n个维度)为例:
player-1:以source data(源数据)为基础计算出一个n维的cuboid;
player-2:以上一层的n维cuboid维基础,计算出n个n-1维的cuboid;
... ...
player-k+1:以上一层的n-k+1维cuboid为基础,计算出n!/[(n-k)!k!]=个n-k维的cuboid;
... ...
player-n+1:以上一层的1维cuboid为基础,计算出1个0维的cuboid。
如下图:
用官网上一个4维cube的例子来说明一下具体过程。
在player-1,根据源数据得到1个4-D的cuboid;然后cong中任意取出三个维度得到4个3-D cuboids;接着从3-D cuboids出发,任意取出其中两个维度得到6个2-D cuboids;再以2-D cuboids为基础,任意取出其中一个维度得到4个1-D cuboids;最后根据1-D cuboids 计算出一个0-D cuboid。
此算法的Mapper和Reducer都比较简单。Mapper以上一层Cuboid的结果(Key-Value对)作为输入。由于Key是由各维度值拼接在一起,从其中找出要聚合的维度,去掉它的值成新的Key,并对Value进行操作,然后把新Key和Value输出,进而Hadoop MapReduce对所有新Key进行排序、洗牌(shuffle)、再送到Reducer处;Reducer的输入会是一组有相同Key的Value集合,对这些Value做聚合计算,再结合Key输出就完成了一轮计算。
优点:这个算法的原理很清晰,主要就是利用了MR,sorting、grouping、shuffing全部由MR完成,开发人员只需要关注cubing的逻辑,由于hadoop的成熟,该算法的运行很稳定。
缺点:cube的维度越高,需要的MR任务越多(n-D cube 至少需要n 个MR)太多的shuffing操作(mapper端不做聚合,所有在下一层中具有相同维度的值有combiner 和reducer聚合),对hdfs读写比较多(每一层MR的结果会写到hdfs然后下一层MR从hdfs 读取数据)。
2、基于Spark
“by-layer” Cubing把一个大任务划分为许多步骤,每一步骤的计算依赖于上一个步骤的输出结果,所以当某一个步骤的计算出现问题时,可以再次读取上一步骤的结果重新计算,而不用从头开始。使得“by-layer” Cubing算法稳定可靠,当换到spark上时,便保留了这个算法。因此在spark上这个算法也被称为“By layer Spark Cubing”。
如上图所示,与在MR上相比,每一层的计算结果不再输出到hdfs,而是放在RDD中。由于RDD存储在内存中,从而有效避免了MR上过多的读写操作。
性能对比:
二、Fast cubing
快速Cube算法(Fast Cubing)是麒麟团队对新算法的一个统称,它还被称作“逐段”(By Segment) 或“逐块”(By Split) 算法。
该算法的主要思想是,对Mapper所分配的数据块,将它计算成一个完整的小Cube 段(包含所有Cuboid);每个Mapper将计算完的Cube段输出给Reducer做合并,生成大Cube,也就是最终结果;下图解释了此流程。新算法的核心思想是清晰简单的,就是最大化利用Mapper端的CPU和内存,对分配的数据块,将需要的组合全都做计算后再输出给Reducer;由Reducer再做一次合并(merge),从而计算出完整数据的所有组合。如此,经过一轮Map-Reduce就完成了以前需要N轮的Cube计算。
在Mapper内部也可以有一些优化,下图是一个典型的四维Cube的生成树;第一步会计算Base Cuboid(所有维度都有的组合),再基于它计算减少一个维度的组合。基于parent节点计算child节点,可以重用之前的计算结果;当计算child节点时,需要parent节点的值尽可能留在内存中; 如果child节点还有child,那么递归向下,所以它是一个深度优先遍历。当有一个节点没有child,或者它的所有child都已经计算完,这时候它就可以被输出,占用的内存就可以释放。
如果内存够的话,可以多线程并行向下聚合。如此可以最大限度地把计算发生在Mapper这一端,一方面减少shuffle的数据量,另一方面减少Reducer端的计算量。
优点:总的IO量比以前大大减少。此算法可以脱离Map-Reduce而对数据做Cube计算,故可以很容易地在其它场景或框架下执行,例如Streaming 和Spark。
缺点:代码比以前复杂了很多,由于要做多层的聚合,并且引入多线程机制,同时还要估算JVM可用内存,当内存不足时需要将数据暂存到磁盘,所有这些都增加复杂度。对Hadoop资源要求较高,用户应尽可能在Mapper上多分配内存;如果内存很小,该算法需要频繁借助磁盘,性能优势就会较弱。在极端情况下(如数据量很大同时维度很多),任务可能会由于超时等原因失败。
三、算法选择
用户无需担心使用什么算法构建cube,Kylin会自动选择合适的算法。Kylin在计算Cube之前对数据进行采样,在“fact distinct”步,利用HyperLogLog模拟去重,估算每种组合有多少不同的key,从而计算出每个Mapper输出的数据大小,以及所有Mapper之间数据的重合度,据此来决定采用哪种算法更优。
如果每个Mapper之间的key交叉重合度较低,fast cubing更适合;因为Mapper端将这块数据最终要计算的结果都达到了,Reducer只需少量的聚合。另一个极端是,每个Mapper计算出的key跟其它 Mapper算出的key深度重合,这意味着在reducer端仍需将各个Mapper的数据抓取来再次聚合计算;如果key的数量巨大,该过程IO开销依然显著。对于这种情况,Layered-Cubing更适合。在对上百个Cube任务的时间做统计分析后,Kylin选择了7做为默认的算法选择阀值(参数kylin.cube.algorithm.auto.threshold):如果各个Mapper的小Cube的行数之和,大于reduce后的Cube行数的8倍(各个Mapper的小Cube的行数之和 /reduce后的Cube行数 > 7),采用Layered Cubing, 反之采用Fast Cubing(本质就是各个Mapper之间的key重复度越小,就用Fast Cubing,重复度越大,就用Layered Cubing)关键词:
(责任编辑:黄俊飞)推荐内容
- 环球热头条丨大数据Kylin(六):Kylin构
- 向太周星驰明星站队图_向太周星驰
- 全球通讯!魔兽世界战士30级职业任务流程
- 焦点滚动:春闱和秋闱 几年一次_春闱和秋闱
- 全球今亮点!北交所公司即将突破180家,
- 2023夷陵区线上招聘会时间安排
- 时代电动完成A轮融资 聚焦新能源汽车及
- 天天热消息:抛光浆
- 两地都交了养老保险怎么办 能退掉一边吗
- 健康饮食,构筑春季免疫“防火墙” 观速讯
- 轮椅冰壶世锦赛中国队成功卫冕
- 中国人寿万能险官网利率_中国人寿万能险
- 最新:电子狗的价格是什么牌子的电子狗
- 快看点丨全国首个消防女飞行员,她的经历
- 甲硝唑氯化钠注液的作用的作用与用途_甲
- 当前快报:丙三醇(甘油)商品报价动态(2
- 每日热闻!蜂蜜在常温下能放多久不会变质?
- 资讯推荐:治疗小儿鼻炎用什么药最好_宝宝
- 云顶新耀:硅谷银行被接管不会对公司造成
- 春融融效李长吉体_对于春融融效李长吉体
- 每日关注!西方媒体曝“亲乌团体破坏北溪
- 维尼修斯阿森西奥破门
- 今日最新!汽车全面降价潮来袭?惨烈价格
- 速看:爱默生电梯苏州有限公司_爱默生简
- 秦放的真实身份_世界今头条
- 黄晶果的功效与作用_黄晶果的功效与作用
- 俄媒:乌日托米尔地区发生导弹袭击事件
- 通讯!广东省惠州市大亚湾区属于哪个县_
- 苏州市“健康社区”评估结果出炉,望亭镇
- 济南公交推出33条踏春游玩定制专线,满20
- 【全球快播报】同仁堂保健品
- 去死的英语怎么写_去死的英文怎么读 每
- 包车客运合同范本(实用32篇)-世界速看料
- 老土豆是什么意思_ltd是什么的缩写-天天
- 环球新资讯:6.69万元起售,五菱宏光PLUS
- 婴儿能吹空调吗?多少度合适_婴儿能吹空调
- 环球快消息!田小凤长啥样_田小凤年轻真
- 船迟又遇打头风原文(船迟又遇打头风)
- 今日热闻!燕赵财险未经审批设非保险子公
- 惠程科技:公司目前没有固态电池相关业务
- 岳阳楼记原文及翻译_岳阳楼记原文 独家
- 最新消息:二十四小时播报:专家村级债达
- 全球速递!还有11天报名截止!梁河万亩茶
- 山东快板经典段子修身养性_山东快板经典
- 最新消息:北京住房公积金管理中心电话多
- 拉莫三嗪说明书图片_拉莫三嗪说明书 每
- 小女孩坐公交迷路多方暖心接力找“妈妈”
- 洋葱炒什么好吃?_洋葱炒什么好吃 每日观点
- 直击315|消费者投诉:小鹅通存在虚假宣
- 华鼎股份:公司收购亚特新材将产生规模效
- 世界今亮点!爆枪英雄好号密码一样_爆枪
- 世界头条:往期回顾:东契奇伤退鹈鹕战胜
- 心心APP买东西几天能发货 心心app用的是
- 世界短讯!明水县税务局:“银税互动”精
- 【全球新要闻】cad打印a4图纸尺寸怎么设
- 日本去年四季度GDP修正值为年率增长0.1%
- 阴铁来历和结局(阴铁)|天天日报
- 易烊千玺工作室招聘2022_易烊千玺工作室
- 莴苣做之前需要焯水吗_凉拌莴苣怎么做好
- 临沧市驻昆办妇联举办“欢乐庆三八,巾帼
- 每日关注!西方媒体曝“亲乌团体破坏北溪
- 维尼修斯阿森西奥破门
- 今日最新!汽车全面降价潮来袭?惨烈价格
- 速看:爱默生电梯苏州有限公司_爱默生简
- 秦放的真实身份_世界今头条
- 黄晶果的功效与作用_黄晶果的功效与作用
- 俄媒:乌日托米尔地区发生导弹袭击事件
- 通讯!广东省惠州市大亚湾区属于哪个县_
- 苏州市“健康社区”评估结果出炉,望亭镇
- 济南公交推出33条踏春游玩定制专线,满20
- 【全球快播报】同仁堂保健品
- 去死的英语怎么写_去死的英文怎么读 每
- 包车客运合同范本(实用32篇)-世界速看料
- 老土豆是什么意思_ltd是什么的缩写-天天
- 环球新资讯:6.69万元起售,五菱宏光PLUS
- 婴儿能吹空调吗?多少度合适_婴儿能吹空调
- 环球快消息!田小凤长啥样_田小凤年轻真
- 船迟又遇打头风原文(船迟又遇打头风)
- 今日热闻!燕赵财险未经审批设非保险子公
- 惠程科技:公司目前没有固态电池相关业务
- 岳阳楼记原文及翻译_岳阳楼记原文 独家
- 最新消息:二十四小时播报:专家村级债达
- 全球速递!还有11天报名截止!梁河万亩茶
- 山东快板经典段子修身养性_山东快板经典
- 最新消息:北京住房公积金管理中心电话多
- 拉莫三嗪说明书图片_拉莫三嗪说明书 每
- 小女孩坐公交迷路多方暖心接力找“妈妈”
- 洋葱炒什么好吃?_洋葱炒什么好吃 每日观点
- 直击315|消费者投诉:小鹅通存在虚假宣
- 华鼎股份:公司收购亚特新材将产生规模效
- 世界今亮点!爆枪英雄好号密码一样_爆枪
- 世界头条:往期回顾:东契奇伤退鹈鹕战胜
- 心心APP买东西几天能发货 心心app用的是
- 世界短讯!明水县税务局:“银税互动”精
- 【全球新要闻】cad打印a4图纸尺寸怎么设
- 日本去年四季度GDP修正值为年率增长0.1%
- 阴铁来历和结局(阴铁)|天天日报
- 易烊千玺工作室招聘2022_易烊千玺工作室
- 莴苣做之前需要焯水吗_凉拌莴苣怎么做好
- 临沧市驻昆办妇联举办“欢乐庆三八,巾帼
- 全球热点!工行信用卡能提高额度吗
- Idea Note 是一款易于访问的笔记应用程序
- dps_天天快播报
- 全球快资讯丨亚太科技:汽车行业的进入壁
- 当前要闻:五分裤
- 龙宇股份3月8日盘中涨幅达5%
- 当前资讯!全省仅4个!淇县获此荣誉
- 船鞋 今日热讯
- 全面取消二手房、新房限售!这地持续出招
- 常乐公主-世界时讯
- 七成受访市民赞成香港特区政府鼓励生育_
- 南海普陀山观世音菩萨_南海普陀山 全球
- 当前消息!利奥波德别墅
- 创新药赛道回暖!两个月超20家企业获融资
- 环球播报:央视足球解说员
- 最新:2022年安徽省美术馆端午开放时间
- 当前信息:曝已婚男明星精神状态异常,5
- 广州塔旅游广州塔旅游攻略
- 世界聚焦:小摩警告:0DTE期权在极端情况
- 洗斑_全球速讯