Apache Kylin

日前,eBay公司隆重宣布已经正式向开源业界推出分布式分析引擎:Kylin(http://kylin.io)。做为一套旨在对Hadoop环境下分析流程进行加速、且可以与SQL兼容性工具顺利协做的解决方案,Kylin成功将SQL接口与多维分析机制(OLAP)引入Hadoop,旨在对规模极为庞大的数据集加以支持。前端

背景信息

eBay公司当前面临的主要挑战在于,数据规模正随着用户群体的多样化拓展而水涨船高。咱们的用户——好比在分析与业务部门当中但愿能在保持最低延迟水平的前提下继续使用本身所熟悉的工具方案,例如Tableau与Excel。 
 
有鉴于此,咱们与公司内部的分析部门进行紧密合做,并勾勒出eBay眼中足以构成成功产品的基本要求:
1.数百亿数据行的查询延迟须要保持在次秒级别。  
2.可以为使用SQL兼容性工具的用户提供ANSI SQL。  
3.完整的OLAP方案以实现各种高级功能。  
4.拥有对高基数与超大规模业务体系的支持能力。  
5.面向成千上万用户的高并发性处理能力。  
6.可以处理TB乃至PB级别分析任务的分布式横向扩展架构。 算法

咱们很快意识到,没有任何一种外部解决方案可以切实知足咱们的具体要求——特别是在开源Hadoop社区当中。为了解决企业业务面临的这一系列紧急情况,咱们决定从零开始自主打造一套平台。在优秀的技术团队与部分试点客户的通力配合之下,咱们已经可以在将Kylin平台引入生产环境的同时、为其发布一套开源版本。 shell

重点特性概述安全

Kylin 是一套卓越的平台方案,可以在大数据分析领域实现如下各项特性: 服务器

•  规模化环境下的极速OLAP引擎: Kylin的设计目的在于削减Hadoop环境中处理超过百亿行数据时的查询延迟时间。  
• Hadoop上的ANSI SQL接口:Kylin可以在Hadoop之上提供ANSI SQL并支持大部分ANSI SQL查询功能。  
•交互式查询功能:用户能够经过Kylin以秒级如下延迟水平实现与Hadoop数据的交互——在面对同一套数据集时,其性能表现优于Hive查询机制。  
•  利用MOLAP cube(立方体)对数百亿行数据进行查询: 用户可以在Kylin当中定义一套数据模型对其进行预构建,其中所能包含的原始数据记录可超过百亿行。  
•  与商务智能工具进行无缝化集成:Kylin目前可以与多种商务智能工具相集成,包括Tableau以及其它第三方应用程序。  
•  开源ODBC驱动程序: Kylin的ODBC驱动程序从零开始逐步构建而成,并且可以与Tableau实现良好的协做效果。咱们也已经对这部分驱动程序进行开源处理并发布至技术社区当中。  架构

其它特性:并发

  • 任务管理与监控机制
  • 经过压缩与编码机制下降存储容量需求 
  • cube的增量式更新 
  • 利用HBase协处理器实现查询延迟控制 
  •  对不一样计数进行近似查询的能力(HyperLogLog) 
  • 提供易于使用的Web界面,旨在对cube进行管理、构建、监控与查询
  • cube/项目层面对ACL进行设置的安全功能 
  • 支持LDAP集成 

基本设计思路框架

Kylin平台的设计思路其实并不是全新产生。在过去三十年当中,已经有不少技术方案使用到一样的理论依据来实现分析流程加速。具体而言,此类技术包括将预先计算完成的结果保存起来以备分析查询、利用全部可能的维度组合为每一个层级生成cuboid(基本方体)、或者是在不一样层级上对所有指数进行计算。 
 
下面这幅图片所示为cuboid的拓扑结构,供你们用做参考: 分布式


当数据规模变得愈来愈大时,预计算处理机制就会变得没法实现——即便硬件性能再强大也于事无补。不过在Hadoop强大的分布式计算能力支持下,计算任务可以借助成百上千个计算节点的整体资源。这就保证了Kylin可以以并发方式对这些计算任务进行处理,并经过合并生成最终结果——这可以显著下降总体处理时间。 高并发

从关系型到键-值型 

下面举一个实例,假设Hive表当中所保存的几条记录表明着一套关系型结构。当其数据规模增加到极其巨大的水平时——例如上百亿甚至过万亿行数据——那么像“2010年咱们在美国本土售出了多少套技术类方案”这样的简单问题也将带来涵盖巨大数据量的表内容扫描,给出应答的延时情况也会变得没法接受。因为每一次运行查询时所须要的值是固定的,所以咱们彻底能够预先进行计算并对结果加以存储、以备往后随时调用。这项技术被称为从关系型到键-值型(Relational to Key—Value,简称KV)处理。处理过程将生成全部维度组合并以下图所示将测得值显示出来——图片右侧为计算结果。图片的中间一列内容由左至右表示的是这类大规模数据处理流程中数据是如何由Map Reduce进行计算的。  
                 
Kylin的构建正是以这套理论为基础,并且在对大规模数据进行处理时充分发挥了Hadoop生态系统的强大能力:

1. 从Hive当中读取数据(这些数据被保存在HDFS之上)  
2. 运行Map Reduce任务以实现预计算  
3. 将cuba数据保存在HBase当中  
4. 利用Zookeeper进行任务协调 

架构

如下图表所示为Kylin的高层架构。  
                    

以上图表勾勒出Cube构建引擎(Cube Build Engine)是如何以离线处理方式将关系型数据转化成键-值型数据的。其中的黄线部分还表现出在线分析数据的处理流程。数据请求能够利用基于SQL的工具由SQL提交而产生,或者利用第三方应用程序经过Kylin的RESTful服务来实现。RESTful服务会调用Query Engine,后者则检测对应的目标数据集是否真实存在。若是确实存在,该引擎会直接访问目标数据并以次秒级延迟返回结果。若是目标数据集并不存在,该引擎则会根据设计将无匹配数据集的查询路由至Hadoop上的SQL处、即交由Hive等Hadoop集群负责处理。 

如下为关于Kylin平台内全部组件的详细描述。 
 
•元数据管理工具(Metadata Manager): Kylin是一款元数据驱动型应用程序。元数据管理工具是一大关键性组件,用于对保存在Kylin当中的全部元数据进行管理,其中包括最为重要的cube元数据。其它所有组件的正常运做都需以元数据管理工具为基础。  
•任务引擎(Job Engine): 这套引擎的设计目的在于处理全部离线任务,其中包括shell脚本、Java API以及Map Reduce任务等等。任务引擎对Kylin当中的所有任务加以管理与协调,从而确保每一项任务都能获得切实执行并解决其间出现的故障。  
•存储引擎(Storage Engine): 这套引擎负责管理底层存储——特别是cuboid,其以键-值对的形式进行保存。存储引擎使用的是HBase——这是目前Hadoop生态系统当中最理想的键-值系统使用方案。Kylin还可以经过扩展实现对其它键-值系统的支持,例如Redis。  
•REST Server:  REST Server是一套面向应用程序开发的入口点,旨在实现针对Kylin平台的应用开发工做。 此类应用程序能够提供查询、获取结果、触发cube构建任务、获取元数据以及获取用户权限等等。  
•ODBC驱动程序:为了支持第三方工具与应用程序——例如Tableau——咱们构建起了一套ODBC驱动程序并对其进行了开源。咱们的目标是让用户可以更为顺畅地采用这套Kylin平台。  
•查询引擎(Query Engine):当cube准备就绪后,查询引擎就可以获取并解析用户查询。它随后会与系统中的其它组件进行交互,从而向用户返回对应的结果。  
在Kylin当中,咱们使用一套名为Apache Calcite的开源动态数据管理框架对代码内的SQL以及其它插入内容进行解析。Calcite架构以下图所示。(Calcite最初被命名为Optiq,由Julian Hyde所编写,但现在已经成为Apache孵化器项目之一。) 

              

Kylin在eBay公司中的应用

在对Kylin进行开源化处理的同时,咱们已经在eBay公司的多个业务部门当中将其应用于生产实践。其中规模最大的用例就是对由120多亿条源记录所生成的超过14TB cube数据进行分析。90%的查询请求都能在5秒钟以内获取到返回结果。如今,咱们拥有更多面向分析师以及业务用户的用例,他们可以访问这些分析机制并轻松经过Tableau仪表板获取相关结果——而再也不须要借助Hive查询或者shell命令等复杂机制。 

下一步发展规划

•  在高基数维度上支持TopN算法(即对大量对象进行排序并从中选取前N位结果):目前的MOLAP技术在高基数维度上进行查询时的表现尚算不上完美——例如对单一列中的数百万个不一样值进行TopN运算。 

与各种搜索引擎相似(正如众多研究人员所指出),倒排索引是此类预构建结果的理想匹配机制。  
•  支持混合OLAP(简称HOLAP):MOLAP在历史数据查询领域拥有出色的实际表现,但因为愈来愈多数据须要以实时方式加以处理,所以咱们须要尽快将实时/近实时处理结果与历史结果结合起来、以做为业务决策中的参考信息。不少内存内技术方案已经可以以关系型OLAP(简称ROLAP)的方式知足上述需求。而Kylin的下一代版本将成为混合OLAP(简称HOLAP),即结合MOLAP与ROLAP双方的优点以带来单一一套面向前端查询的入口点方案。 

开源

Kylin已经以开源姿态被交付至技术社区。为了以Kylin为核心发展出更为强大的生态系统,咱们目前正提议将Kylin转化为Apache孵化器项目。在Owen O’Malley(Hortonworks公司联合创始人兼Apache成员)与Julian Hyde(Apache Calcite缔造者,目前供职于Hortonworks公司)等Hadoop开发者社区支持者的鼎力协助,咱们相信Kylin足以乘开源社区这股强劲的东风顺利跨入新的纪元。 

咱们欢迎你们加入到Kylin贡献者阵营中来,感兴趣的朋友请点击如下连接以访问Kylin网站并获取更多详尽信息:http://kylin.io

做为起步,你们并不必定立刻就要对核心代码库进行开源贡献,从如下方面着手也是不错的选择:
  
1.  Shell客户端
2.  RPC服务器
3.  任务调度
4.  工具

要获取更多细节信息或者进一步探讨上述议题,你们能够在twitter上关注咱们@KylinOLAP或者加入咱们的谷歌群组:
  
https://groups.google.com/forum/#!forum/kylin-­‐olap 

总结

Kylin已经在eBay公司内部融入生产环境,专门负责处理规模极端庞大的数据集。这套平台拥有显著的性能优点,实践证实其可以帮助分析师们轻松借助本身所为熟悉的工具对Hadoop当中的数据进行充分利用。咱们也乐于推出Kylin的开源版本。欢迎你们给出本身的反馈与建议,咱们期待着您参与到这个开源你们庭中来。

相关文章
相关标签/搜索