Kyligence DeepInsight AI 深度洞察 - 首个企业级自主深度推理和洞察产品发布 立即了解更多

大数据分析界的“神兽” Apache Kylin 有多牛?

1. Apache Kylin 是什么?

在现在的大数据时代,越来越多的企业开始使用 Hadoop 管理数据,但是现有的业务分析工具(如 Tableau,Microstrategy 等)往往存在很大的局限,如难以水平扩展、无法处理超大规模数据、缺少对 Hadoop 的支持;而利用 Hadoop 做数据分析依然存在诸多障碍,例如大多数分析师只习惯使用 SQL,Hadoop 难以实现快速交互式查询等等。神兽 Apache Kylin 就是为了解决这些问题而设计的。

Apache Kylin,中文名麒(shen)麟(shou) 是 Hadoo p动物园的重要成员。Apache Kylin 是一个开源的分布式分析引擎,最初由 eBay 开发贡献至开源社区。它提供 Hadoop 之上的 SQL 查询接口及多维分析(OLAP)能力以支持大规模数据,能够处理 TB 乃至 PB 级别的分析任务,能够在亚秒级查询巨大的 Hive 表,并支持高并发。

Apache Kylin 于 2014 年 10 月在 github 开源,并很快在 2014 年 11 月加入 Apache 孵化器,于 2015 年 11 月正式毕业成为 Apache 顶级项目,也成为首个完全由中国团队设计开发的 Apache 顶级项目。于 2016 年 3 月,Apache Kylin 核心开发成员创建了 Kyligence 公司,力求更好地推动项目和社区的快速发展。

Kyligence 是一家专注于大数据分析领域创新的数据科技公司,提供基于 Apache Kylin 的企业级智能分析平台及产品,以及可靠、专业、源码级的商业化支持;并推出 Apache Kylin 开发者培训,颁发全球唯一的 Apache Kylin 开发者认证证书。

 

2. Kylin 的基本原理和架构

简单来说,Kylin 的核心思想是预计算,即对多维分析可能用到的度量进行预计算,将计算好的结果保存成 Cube,供查询时直接访问。把高复杂度的聚合运算、多表连接等操作转换成对预计算结果的查询,这决定了 Kylin 能够拥有很好的快速查询和高并发能力。

上图所示就是一个 Cube 的例子,假设有 4 个 dimension,这个 Cube 中每个节点(称作 Cuboid)都是这 4 个 dimension 的不同组合,每个组合定义了一组分析的 dimension(如g roup by),measure 的聚合结果就保存在这每个 Cuboid 上。查询时根据 SQL 找到对应的 Cuboid,读取 measure 的值,即可返回。

为了更好的适应大数据环境,Kylin 从数据仓库中最常用的 Hive 中读取源数据,使用  MapReduce 作为 Cube 构建的引擎,并把预计算结果保存在 HBase 中,对外暴露 Rest API/JDBC/ODBC 的查询接口。因为 Kylin 支持标准的 ANSI SQL,所以可以和常用分析工具(如 Tableau、Excel 等)进行无缝对接。下面是 Kylin 的架构图。

说到 Cube 的构建,Kylin 提供了一个称作 Layer Cubing 的算法。简单来说,就是按照 dimension数 量从大到小的顺序,从 Base Cuboid 开始,依次基于上一层 Cuboid 的结果进行再聚合。每一层的计算都是一个单独的 Map Reduce 任务。如下图所示。

MapReduce 的计算结果最终保存到 HBase 中,HBase 中每行记录的 Rowkey 由 dimension 组成,measure 会保存在 column family 中。为了减小存储代价,这里会对 dimension 和 measure 进行编码。查询阶段,利用 HBase 列存储的特性就可以保证 Kylin 有良好的快速响应和高并发。

有了这些预计算的结果,当收到用户的 SQL 请求,Kylin 会对 SQL 做查询计划,并把本该进行的 Join、Sum、Count Distinct 等操作改写成 Cube 的查询操作。

Kylin 提供了一个原生的 Web 界面,在这里,用户可以方便的创建和设置 Cube、管控 Cube 构建进度,并提供 SQL 查询和基本的结果可视化。

根据公开数据显示,Kylin 的查询性能不只是针对个别 SQL,而是对上万种 SQL 的平均表现,生产环境下 90%ile 查询能够在在 3s 内返回。在上个月举办的 Apache Kylin Meetup 中,来自美团、京东、百度等互联网公司分享了他们的使用情况。例如,在京东云海的案例中,单个 Cube 最大有 8 个维度,最大数据条数 4 亿,最大存储空间 800G,30 个 Cube 共占存储空间 4T 左右。查询性能上,当 QPS 在 50 左右,所有查询平均在 200ms 以内,当 QPS 在 200 左右,平均响应时间在 1s 以内。

北京移动也在 meetup 上展示了 Kylin 在电信运营商的应用案例,从数据上看,Kylin 能够在比 Hive/SparkSQL 在更弱的硬件配置下获得更好的查询性能。

目前,有越来越多的国内外公司将 Kylin 作为大数据生产环境中的重要组件,如 ebay、银联、百度、中国移动等。大家如果想了解更多社区的案例和动态,可以登录 Apache Kylin 官网或 Kyligence 博客进行查看。

 

3. Kylin 的最新特性

Kylin 的最新版本 1.5.x 引入了不少让人期待的新功能,可扩展架构将 Kylin 的三大依赖(数据源、Cube 引擎、存储引擎)彻底解耦。Kylin 将不再直接依赖于 Hadoop/HBase/Hive,而是把 Kylin 作为一个可扩展的平台暴露抽象接口,具体的实现以插件的方式指定所用的数据源、引擎和存储。

开发者和用户可以通过定制开发,将 Kylin 接入除 Hadoop/HBase/Hive 以外的大数据系统,比如用 Kafka 代替 Hive 作数据源,用 Spark 代替 MapReduce 做计算引擎,用 Cassandra 代替 HBase 做存储,都将变得更为简单。这也保证了 Kylin 可以随平台技术一起演进,紧跟技术潮流。

在 Kylin 1.5.x 中还对 HBase 存储结构进行了调整,将大的 Cuboid 分片存储,将线性扫描改良为并行扫描。基于上万查询进行了测试对比结果显示,分片的存储结构能够极大提速原本较慢的查询 5-10 倍,但对原本较快的查询提速不明显,综合起来平均提速为 2 倍左右。

除此之外,1.5.x 还引入了 Fast cubing 算法,利用 Mapper 端计算先完成大部分聚合,再将聚合后的结果交给 Reducer,从而降低对网络瓶颈的压力。对 500 多个 Cube 任务的实验显示,引入 Fast cubing 后,总体的 Cube 构建任务提速 1.5 倍。

目前,社区正在着手准备 Apache Kylin 1.5.2 版本的发布,目前正处于 Apache Mailing list 投票阶段,预计将会在本周在 Kylin官网发布正式下载。

在本次的 1.5.2 版本中,Kylin 带来了总计  36 个缺陷修复、33 个功能改进、6 个新功能。一些主要的功能改进包括对 HyperLogLog 计算效率的提升、在 Cube 构建时对 Convert data to hfile 步骤的提速、UI 上对功能提示的体验优化、支持 hive view 作为 lookup 表等等。

另一个新消息是 Kylin 将支持 MapR 和 CDH 的 Hadoop 发行版,具体信息可见 KYLIN-1515 和 KYLIN-1672。相应的测试版本是 MapR5.1 和 CDH5.7。

UI 上提供了一个重要更新,即允许用户在 Cube 级别进行自定义配置,以覆盖 kylin.properties 中的全局配置。如在 cube 中定义 kylin.hbase.region.count.max 可以设置该 cube 在 hbase 中 region 切分的最大数量。

另一个重要的功能是 Diagnosis。用户经常会遇到一些棘手的问题,例如 Cube 构建任务失败、SQL 查询失败,或 Cube 构建时间过长、SQL 查询时间过长等。但由于运维人员对 Kylin 系统了解不深,很难快速定位到 root cause 所在地。我们在 mailing list 里也经常看到很多用户求助,由于不能提供足够充分的信息,社区也很难给出一针见血的建议。

当用户遇到查询、Cube/Model 管理的问题,单击 System 页面的 Diagnosis 按钮,系统会自动抓取当前 Project 相关的信息并打包成 zip 文件下载到用户本地。这个包会包含相关的 Metadata、日志、HBase 配置等。当用户需要在 mailing list 求助,也可以附上这个包。

当一个 cube 构建任务执行失败或时间过长,用户可以单击 Job 下的 Diagnosis 按钮。同样的,系统会抓取和下载 Job 相关信息成一个 zip 包。

添加企微

kyligence
关注我们

kyligence