1、 Cube的物理模型

Cube物理模型

  如上图所示,一个常用的3维立方体,包含:时间、地点、产品。假如data cell 中存放的是产量,则我们可以根据时间、地点、产品来确定产量,同时也可以根据时间、地点来确定所有产品的总产量等。
  Apache Kylin就将所有(时间、地点、产品)的各种组合实现算出来,data cell 中存放度量,其中每一种组合都称为cuboid。估n维的数据最多有2^n个cuboid,不过Kylin通过设定维度的种类,可以减少cuboid的数目。

2 、Cube构建算法介绍

2.1 逐层算法(Layer Cubing)

  我们知道,一个N维的Cube,是由1个N维子立方体、N个(N-1)维子立方体、N*(N-1)/2个(N-2)维子立方体、......、N个1维子立方体和1个0维子立方体构成,总共有2^N个子立方体组成,在逐层算法中,按维度数逐层减少来计算,每个层级的计算(除了第一层,它是从原始数据聚合而来),是基于它上一层级的结果来计算的。
比如,[Group by A, B]的结果,可以基于[Group by A, B, C]的结果,通过去掉C后聚合得来的;这样可以减少重复计算;当 0维度Cuboid计算出来的时候,整个Cube的计算也就完成了。

            

逐层算法

  如上图所示,展示了一个4维的Cube构建过程。
  此算法的Mapper和Reducer都比较简单。Mapper以上一层Cuboid的结果(Key-Value对)作为输入。由于Key是由各维度值拼接在一起,从其中找出要聚合的维度,去掉它的值成新的Key,并对Value进行操作,然后把新Key和Value输出,进而Hadoop MapReduce对所有新Key进行排序、洗牌(shuffle)、再送到Reducer处;Reducer的输入会是一组有相同Key的Value集合,对这些Value做聚合计算,再结合Key输出就完成了一轮计算。
  每一轮的计算都是一个MapReduce任务,且串行执行; 一个N维的Cube,至少需要N次MapReduce Job。

算法优点

  • 此算法充分利用了MapReduce的能力,处理了中间复杂的排序和洗牌工作,故而算法代码清晰简单,易于维护;
  • 受益于Hadoop的日趋成熟,此算法对集群要求低,运行稳定;在内部维护Kylin的过程中,很少遇到在这几步出错的情况;即便是在Hadoop集群比较繁忙的时候,任务也能完成。

算法缺点

  • 当Cube有比较多维度的时候,所需要的MapReduce任务也相应增加;由于Hadoop的任务调度需要耗费额外资源,特别是集群较庞大的时候,反复递交任务造成的额外开销会相当可观;
  • 由于Mapper不做预聚合,此算法会对Hadoop MapReduce输出较多数据; 虽然已经使用了Combiner来减少从Mapper端到Reducer端的数据传输,所有数据依然需要通过Hadoop MapReduce来排序和组合才能被聚合,无形之中增加了集群的压力;
  • 对HDFS的读写操作较多:由于每一层计算的输出会用做下一层计算的输入,这些Key-Value需要写到HDFS上;当所有计算都完成后,Kylin还需要额外的一轮任务将这些文件转成HBase的HFile格式,以导入到HBase中去;
  • 总体而言,该算法的效率较低,尤其是当Cube维度数较大的时候;时常有用户问,是否能改进Cube算法,缩短时间。
2 .2 快速Cube算法(Fast Cubing)

  快速Cube算法(Fast Cubing)是麒麟团队对新算法的一个统称,它还被称作“逐段”(By Segment) 或“逐块”(By Split) 算法。

  该算法的主要思想是,对Mapper所分配的数据块,将它计算成一个完整的小Cube 段(包含所有Cuboid);每个Mapper将计算完的Cube段输出给Reducer做合并,生成大Cube,也就是最终结果;图2解释了此流程。

            

快速Cube算法

与旧算法相比,快速算法主要有两点不同

  • Mapper会利用内存做预聚合,算出所有组合;Mapper输出的每个Key都是不同的,这样会减少输出到Hadoop MapReduce的数据量,Combiner也不再需要;
  • 一轮MapReduce便会完成所有层次的计算,减少Hadoop任务的调配。

子立方体生成树的遍历
  值得一提的还有一个改动,就是子立方体生成树(Cuboid Spanning Tree)的遍历次序;在旧算法中,Kylin按照层级,也就是广度优先遍历(Broad First Search)的次序计算出各个Cuboid;在快速Cube算法中,Mapper会按深度优先遍历(Depth First Search)来计算各个Cuboid。深度优先遍历是一个递归方法,将父Cuboid压栈以计算子Cuboid,直到没有子Cuboid需要计算时才出栈并输出给Hadoop;最多需要暂存N个Cuboid,N是Cube维度数。
采用DFS,是为了兼顾CPU和内存:

  • 从父Cuboid计算子Cuboid,避免重复计算;
  • 只压栈当前计算的Cuboid的父Cuboid,减少内存占用。

                

  • 立方体生成数的遍历过程

  上图是一个四维Cube的完整生成树;按照DFS的次序,在0维Cuboid 输出前的计算次序是 ABCD -> BCD -> CD -> D -> , ABCD, BCD, CD和D需要被暂存;在被输出后,D可被输出,内存得到释放;在C被计算并输出后,CD就可以被输出; ABCD最后被输出。

4.3 、Cube构建流程

Cube构建流程图

主要步骤如下:

  1. 构建一个中间平表(Hive Table):将Model中的fact表和look up表构建成一个大的Flat Hive Table。
  2. 重新分配Flat Hive Tables。
  3. 从事实表中抽取维度的Distinct值。
  4. 对所有维度表进行压缩编码,生成维度字典。
  5. 计算和统计所有的维度组合,并保存,其中,每一种维度组合,称为一个Cuboid。
  6. 创建HTable。
  7. 构建最基础的Cuboid数据。
  8. 利用算法构建N维到0维的Cuboid数据。
  9. 构建Cube。
  10. 将Cuboid数据转换成HFile。
  11. 将HFile直接加载到HBase Table中。
  12. 更新Cube信息。
  13. 清理Hive。

Apache Kylin Buid Cube详细流程2相关推荐

  1. Apache Kylin Buid Cube详细流程

    Build Cube流程主要分为四个阶段: 根据用户的cube信息计算出多个cuboid文件 根据cuboid文件生成htable 更新cube信息 回收临时文件 1.流程一:作业整体描述 把构建Cu ...

  2. PHP7.2与apache环境安装部署详细流程

    php-agent 安装部署详细流程 一.环境 测试机内网IP: 10.128.5.98 用户名口令: root/oneapm21 cat /etc/system-release cat /etc/i ...

  3. 7.Apache Kylin 创建cube 第一阶段报错Create Intermediate Flat Hive 报错 MapredLocalTask

    文章目录 一.问题 二.解决 一.问题 版本: cdh6.2.0 kylin3.0.0 构建cube第一阶段Create Intermediate Flat Hive,报错 FAILED: Execu ...

  4. 深入 Apache Kylin Cube 与查询优化

    2019独角兽企业重金招聘Python工程师标准>>> 近几年,Apache Kylin作为一个高速的开源分布式大数据查询引擎正在迅速崛起.它充分发挥Hadoop.Spark.HBa ...

  5. 一文读懂Apache Kylin(麒麟)

    "麒麟出没,必有祥瑞." -- 中国古谚语 Kylin思维导图 前言 随着移动互联网.物联网等技术的发展,近些年人类所积累的数据正在呈爆炸式的增长,大数据时代已经来临.但是海量数据 ...

  6. Apache Kylin在绿城客户画像系统中的实践

    前言 \\ 作为国内知名的房地产开发商,绿城经过24年的发展,已为全国25万户.80万人营造了美丽家园,并将以"理想生活综合服务提供商"为目标,持续为客户营造高品质的房产品和生活服 ...

  7. 小米大数据:借助Apache Kylin打造高效、易用的一站式OLAP解决方案

    如今的小米不仅是一家手机公司,更是一家大数据与人工智能公司.随着小米公司各项业务的快速发展,数据中的商业价值也愈发突显.而与此同时,各业务团队在数据查询.分析等方面的压力同样正在剧增.因此,为帮助公司 ...

  8. 一文读懂Apache Kylin

    感谢分享. http://www.jianshu.com/p/abd5e90ab051?utm_campaign=maleskine&utm_content=note&utm_medi ...

  9. Apache Kylin

    "麒麟出没,必有祥瑞." -- 中国古谚语 Kylin思维导图 前言 随着移动互联网.物联网等技术的发展,近些年人类所积累的数据正在呈爆炸式的增长,大数据时代已经来临.但是海量数据 ...

最新文章

  1. 多摄像头实时目标跟踪和计数,使用YOLOv4,Deep SORT和Flask
  2. Android 开发包括哪些方面?如何提升?
  3. 操作系统习题4—进程死锁
  4. php并行运算,php多进程并行执行脚本的代码
  5. sphinx4 FrontEnd流程分析
  6. 不等号属于不等式吗_考研专业课备考时,仅仅多刷几遍目标院校的期末考试题就够吗?...
  7. linux编译寻找包含的头文件,Linux编写内核模块编译时找不到头文件
  8. seajs的模块化开发--实践笔记
  9. jmeter正则中常见的转义字符-笔记三
  10. ZigBee学习之——ZStack API解读
  11. python预测比赛_分析5万多场英雄联盟比赛,教你如何轻松用python预测胜负
  12. Web前端基础课程内容有哪些?学前端要学什么你真的清楚吗?
  13. 阿里云服务器租用报价新鲜出炉(轻量和ECS价格)
  14. 海马玩安卓模拟器-安装流程详解
  15. Python简单实现人脸识别检测, 对某平台美女主播照片进行评分排名
  16. iOS——编译与链接
  17. 实验二、电阻变化时二极管的直流电压和交流电流的变化
  18. 信道特征(码元、比特、波特率等概念)
  19. android网络编程 三(Volley)
  20. 2022年《网络安全法》迎来首修,拟对多处加大处罚力度

热门文章

  1. css内边距属性、外边距属性
  2. 程序员真是个悲哀的职业!
  3. matlab中im2bw
  4. 关于pytorch官网教程中的What is torch.nn really?(三)
  5. JavaWeb基础5——HTTP,TomcatServlet
  6. Dennard scaling(MOSEFT scaling)
  7. Tesseract-OCR 控制台怎么使用
  8. 分布式存储与集中式存储
  9. 论文摘要部分如何撰写
  10. linux查找最近新增的大文件