Apache顶级项目介绍系列5 - Kylin
Apache顶级项目介绍5,我们迎来的中国自己的开源,来自本土eBay的顶级项目Kylin。神马?没听过? 别急,放心,Apache的顶级项目各个都身负绝技。
有人问,为什么突然介绍Kylin,呃,有小伙伴热情的提及的Kylin,希望来一篇介绍,本人之前有关注了解过,但没有深入研究过,所以我们先学现卖,符合入门介绍篇。
Kylin(麒麟),由eBay研发并贡献并于2014年10月开源,并于当年11月成为
Apache孵化器项目,是第一个主要由中国团队完整贡献给Apache的项目。去年2015年12月,Apache基金会ASF正式批准Kylin为顶级项目。其发展之快可谓迅猛,搭上了基于大数据的OLAP快车,同时也感慨开源之伟大与贡献.
老样子,一言已概之,Kylin官网(不敢恭维啊,文档宣传也要做做啊)介绍说,Kylin是一个开源分布式分析引擎,提供了基于Hadoop的超大型数据集(TB/PB级别)的SQL接口以及多维度的OLAP分布式联机分析。
上架构图:
可以看到中华文化之麒麟,赞一下!很清晰的架构图,底层存储使用HBase, 数据输入以及Cube Building基于Hive, 中间数据存储HDFS, On Top of 核心引擎之上,提供了REST API, SQL Based Toll / JDBC/ODBC等。右边还有其核心基于HBase的低延迟OLAP Cube;什么叫低延迟,Kylin官方数据给出数百亿行数据查询延时需要保持在亚秒级别!Niubility!其实得益于HBase.
官网给出了几个简单步骤作为事例:
1.从star schema中识别一组Hive表
2.基于Hive表,offline batch构建cube
3.使用sql或者REST API, JDBC, ODBC查询
Kylin平台的设计思路其实并非全新,在过去关系数据库大行其道之日早有,简单来讲其思路就是把预先计算完成的结果保存起来以备分析查询, 利用所有可能纬度组合为每个层次生成cuboid(基本方体),又或是在不同层次上对全部指数进行计算。
科普一下,cube作为核心概念,英文叫多维立方体,cube好比一个坐标系,每个Dimension代表一个坐标系,其每个点的对应值需要从相对应每一个坐标轴取值去获取,这个点cube中称作cell。
cube的基本概念:纬度于度量
纬度Dimension: 纬度提供了分类,表示一类分析角度,纬度,如时间,产品,地域等。
度量Measure:表示聚合分析的数字信息,其集合构成另一个特殊纬度,如数量,金额等。
Kylin的一个核心算法思想:一个n纬的完全Cube,1个n纬子立方体(Cuboid),n个(n-1)纬cuboid, n*(n-1)/2个(n-2)纬cuboid,n个纬cuboid,1个0纬cubid,总共2^n个字立方体组成;晕否?
举例来说,group by a, b结果,可以基于group by a,b,c的结果,通过去掉c后聚合得来,这样可以减少重复计算,当0纬度的cuboid计算出来的时候,真个
Cube的计算就大功告成!
拓扑图:
核心思想,从关系型到key-value。当Hive中数据规模超过百亿,万亿水平,一些简单的问题如查询2015年销售额等就会带来巨大的表扫描,时间也会无法接受。所以cube完全进行预计算,并对结果加以存储。来个术语叫做:
Relational to Key-Value, KV.
Kylin正是构建在这套理论之上,并且充分借用发挥Hadoop生态系统的威力。
1.从Hive中读取数据(HDFS)
2.运行offline job Map/Reduce实现预计算处理
3.将运算结果cube保存到HBase
4.借助Zookeeper进行任务协调
算法中充分利用了MapReduce的能力,处理中间的复杂排序以及shuffle。其中对HDFS操作较多,每一层的key-value都需要写到hdfs,所有计算结束后需要将其转成HBase的HFile格式并导入。
好了,看看Kylin的容貌以及如何创建cube吧:
呃,颜值一般般,恰如麒麟啊?
创建cube:
1.创建项目
2.导入hive
3.创建数据模型
4.创建cube
包括cube info,dimensions,measures等等。
5. offline job
Kylin已经在eBay内部生产使用验证,处理其内部庞大数据集。性能优势明显。未来应该会继续支持更多Hadoop, Spark生态圈,提供快速实时OLAP,以及更多BI工具整合。
好了,我们先到这里了,感谢前eBay参与开发使用Kylin的资深专家的指导与探讨。鉴于现学现卖,各位极客们包涵。我们下一篇继续大数据三剑客!!!
公众号: 技术极客TechBooster