Apache Kylin 入门系列目录算法
简单来讲,Kylin 的核心思想是预计算(利用空间换时间),即对多维分析可能用到的度量进行预计算,将计算好的结果保存成 Cube 并存在 HBase 中,供查询时直接访问。编程
把高复杂度的聚合运算、多表链接等操做转换成对预计算结果的查询,这决定了 Kylin 可以拥有很好的快速查询和高并发能力,具体工做过程以下:json
Apache Kylin 系统能够分为在线查询和离线构建两部分,技术架构如图所示,在线查询的模块主要处于上半区,而离线构建则处于下半区。缓存
离线构建的主要步骤:架构
可扩展指 Kylin 能够对其主要依赖的三个模块作任意的扩展和替换,Kylin 的三大依赖模块分别是数据源(Hive)、构建引擎(MR)和存储引擎(HBase)。并发
可扩展架构带来了额外的灵活性,好比,它能够容许多个引擎同时并存。例如 Kylin 能够同时对接 Hive、Kafka 和其余第三方数据源;抑或用户能够为不一样的 Cube 指定不一样的构建引擎或存储引擎,以期达到最极致的性能和功能定制。app
这个四维 Cube 须要五轮的 MapReduce 来完成:第一轮 MR 的输入是源数据,这一步会对维度列的值进行编码,并计算 ABCD 组合的结果。接下来的 MR 以上一轮的输出结果为输入,向上聚合计算三个维度的组合:ABC、BCD、ABD和ACD;依此类推,直到算出全部的维度组合。框架
Layered Cubing 的特色:高并发
最大化利用 Mapper 端的 CPU 和内存,对分配的数据块,将须要的组合全都作计算后再输出给 Reducer;由 Reducer 再作一次合并(Merge),从而计算出完整数据的全部组合。如此,通过一轮 MapReduce 就完成了之前须要 N 轮的 Cube 计算。oop
Fast Cubing 的特色:最大限度地把计算发生在 Mapper 这一端,一方面减小 shuffle 的数据量,另外一方面减小 Reducer 端的计算量。
第一步会计算 Base Cuboid(全部维度都有的组合),再基于它计算减小一个维度的组合。基于 parent 节点计算 child 节点,能够重用以前的计算结果;当计算 child 节点时,须要 parent 节点的值尽量留在内存中;若是 child 节点还有 child,那么递归向下,因此它是一个深度优先遍历。当有一个节点没有 child,或者它的全部 child 都已经计算完,这时候它就能够被输出,占用的内存就能够释放。
Any Code,Code Any!
扫码关注『AnyCode』,编程路上,一块儿前行。