Kylin多维分析引擎(四):Kylin Cude构建流程详解

Apache Kylin的Cube构建涉及Hive、Hadoop MapReduce和HBase,通过逐层构建(Layer)或快速构建(In-Memory)算法生成Cuboid。在构建过程中,对维度进行压缩编码、统计维度组合,并基于查询频率优化Cuboid剪枝,以平衡空间和查询时间。此外,使用衍生维度、聚合组、层级维度、联合维度和按维度分片等方法进行优化,提高查询效率。最后,CubePlanner根据查询统计自动优化Cube结构。

1.Kylin Cude构建流程

1.1.文字描述

  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。

2.Cube构建算法

两种策略:
1、layer 每一层诶一层的来,运行多个MR,延迟高,但是相对稳定。
2、in-memory 无论多复杂,就一个MR,占用资源多,如果资源不够,运行会不成功

2.1. 逐层构建算法(layer)

第一层:按照所有维度做group by的聚合
第二层:维度递减

       我们知道,一个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的计算也就完成了。
       每一轮的计算都是一个MapReduce任务,且串行执行;一个N维的Cube,至少需要N次MapReduceJob。

2.1.1.优点

  1. 此算法充分利用了MapReduce的优点(稳定),处理了中间复杂的排序和shuffle工作,故而算法代码清晰简单,易于维护;
  2. 受益于Hadoop的日趋成熟,此算法非常稳定,即便是集群资源紧张时,也能保证最终能够完成。

2.1.2.缺点

  1. 当Cube有比较多维度的时候,所需要的MapReduce任务也相应增加;由于Hadoop的任务调度需要耗费额外资源,特别是集群较庞大的时候,反复递交任务造成的额外开销会相当可观;
  2. 由于Mapper逻辑中并未进行聚合操作,所以每轮MR的shuffle工作量都很大,导致效率低下。
  3. 对HDFS的读写操作较多:由于每一层计算的输出会用做下一层计算的输入,这些Key-Value需要写到HDFS上;当所有计算都完成后,Kylin还需要额外的一轮任务将这些文件转成HBase的HFile格式,以导入到HBase中去;

总体而言,该算法的效率较低,尤其是当Cube维度数较大的时候。

2.2. 快速构建算法(inmem)

  1. 首先把数据进行分散
  2. 每个MapTask执行一部分数据的所有的可能的维度组合的预计算都完成了(在内存中进行中)每个MapTask计算完毕之后,也会得到多个cuboid,这个整体结果就是一个Segment(cube的数据片段)
  3. shuffle过程中,会把各个segment中的相同维度组合的数据,汇总到一起
  4. 在reducer中,再来做最后的维度构建

也被称作“逐段”(By Segment)或“逐块”(By Split)算法,从1.5.x开始引入该算法,该算法的主要思想是,每个Mapper将其所分配到的数据块,计算成一个完整的小Cube段(包含所有Cuboid)。每个Mapper将计算完的Cube段输出给Reducer做合并,生成大Cube,也就是最终结果。如图所示解释了此流程。

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

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

2.3.最终的结论

kylin:就是 用空间换时间

如果维度越多,使用快速算法,效率提升越明显,但同时,使用到的资源也越多
选择方式:
如果内存够多,使用快速构建算法
如果内存资源不足,多花点时间

3.Cube构建优化

       Apache Kylin的核心思想是根据用户的数据模型和查询样式对数据进行预计算,并在查询时直接利用预计算结果返回查询结果。(kylin = hive mapreduce hbase)相比普通的大规模并行处理解决方案,Kylin具有响应时间快、查询时资源需求小、吞吐量大等优点(这么讲的额原因,就是因为用户写查询时都能击中cube)。用户的数据模型包括维度、度量、分区列等基本信息,也包括用户通过Cube优化工具赋予其的额外的模型信息。
       Kylin在没有采取任何优化措施的情况下,

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值