1.Kylin Cude构建流程

1.1.文字描述
- 构建一个中间平表(Hive Table):将Model中的fact表和look up表构建成一个大的Flat Hive Table。
- 重新分配Flat Hive Tables。
- 从事实表中抽取维度的Distinct值。
- 对所有维度表进行压缩编码,生成维度字典。
- 计算和统计所有的维度组合,并保存,其中,每一种维度组合,称为一个Cuboid。
- 创建HTable。
- 构建最基础的Cuboid数据。
- 利用算法构建N维到0维的Cuboid数据。
- 在内存构建Cube。
- 将Cuboid数据转换成HFile。
- 将HFile直接加载到HBase Table中。
- 更新Cube信息。
- 清理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.优点
- 此算法充分利用了MapReduce的优点(稳定),处理了中间复杂的排序和shuffle工作,故而算法代码清晰简单,易于维护;
- 受益于Hadoop的日趋成熟,此算法非常稳定,即便是集群资源紧张时,也能保证最终能够完成。
2.1.2.缺点
- 当Cube有比较多维度的时候,所需要的MapReduce任务也相应增加;由于Hadoop的任务调度需要耗费额外资源,特别是集群较庞大的时候,反复递交任务造成的额外开销会相当可观;
- 由于Mapper逻辑中并未进行聚合操作,所以每轮MR的shuffle工作量都很大,导致效率低下。
- 对HDFS的读写操作较多:由于每一层计算的输出会用做下一层计算的输入,这些Key-Value需要写到HDFS上;当所有计算都完成后,Kylin还需要额外的一轮任务将这些文件转成HBase的HFile格式,以导入到HBase中去;
总体而言,该算法的效率较低,尤其是当Cube维度数较大的时候。
2.2. 快速构建算法(inmem)
- 首先把数据进行分散
- 每个MapTask执行一部分数据的所有的可能的维度组合的预计算都完成了(在内存中进行中)每个MapTask计算完毕之后,也会得到多个cuboid,这个整体结果就是一个Segment(cube的数据片段)
- shuffle过程中,会把各个segment中的相同维度组合的数据,汇总到一起
- 在reducer中,再来做最后的维度构建
也被称作“逐段”(By Segment)或“逐块”(By Split)算法,从1.5.x开始引入该算法,该算法的主要思想是,每个Mapper将其所分配到的数据块,计算成一个完整的小Cube段(包含所有Cuboid)。每个Mapper将计算完的Cube段输出给Reducer做合并,生成大Cube,也就是最终结果。如图所示解释了此流程。
与旧算法相比,快速算法主要有两点不同:
- Mapper会利用内存做预聚合,算出所有组合;Mapper输出的每个Key都是不同的,这样会减少输出到Hadoop MapReduce的数据量,Combiner也不再需要;
- 一轮MapReduce便会完成所有层次的计算,减少Hadoop任务的调配。
2.3.最终的结论

kylin:就是 用空间换时间
如果维度越多,使用快速算法,效率提升越明显,但同时,使用到的资源也越多
选择方式:
如果内存够多,使用快速构建算法
如果内存资源不足,多花点时间
3.Cube构建优化
Apache Kylin的核心思想是根据用户的数据模型和查询样式对数据进行预计算,并在查询时直接利用预计算结果返回查询结果。(kylin = hive mapreduce hbase)相比普通的大规模并行处理解决方案,Kylin具有响应时间快、查询时资源需求小、吞吐量大等优点(这么讲的额原因,就是因为用户写查询时都能击中cube)。用户的数据模型包括维度、度量、分区列等基本信息,也包括用户通过Cube优化工具赋予其的额外的模型信息。
Kylin在没有采取任何优化措施的情况下,

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

被折叠的 条评论
为什么被折叠?



