{eval=Array;=+count(Array);}

问答专栏Q & A COLUMN

唯品会的OLAP场景中的Presto on Kylin是如何实现的?

wayneliwayneli 回答0 收藏1
收藏问题

1条回答

Cciradih

Cciradih

回答于2022-06-28 15:28

Kylin的背景

Kylin 是一个Hadoop生态圈下的MOLAP系统,是ebay大数据部门从2014年开始研发的支持TB到PB级别数据量的分布式Olap分析引擎。其特点包括:

可扩展的超快的OLAP引擎

提供ANSI-SQL接口

交互式查询能力

MOLAP Cube 的概念

与BI工具可无缝整合

Kylin典型的应用场景如下:

用户数据存在于Hadoop HDFS中,利用Hive将HDFS文件数据以关系数据方式存取,数据量巨大,在500G以上

每天有数G甚至数十G的数据增量导入

有10个左右为固定的分析维度

Kylin的核心思想是利用空间换时间,由于查询方面制定了多种灵活的策略,进一步提高空间的利用率,使得这样的平衡策略在应用中是值得采用的。

kylin的总体架构

Kylin 作为一个Olap引擎完成了从数据源抓取数据,ETL到自己的存储引擎,提供REST服务等一系列工作,其架构如图所示:

Kylin 大数据时代的OLAP利器

Kylin 的生态圈包括:

Kylin Core: Kylin 引擎的框架,查询、任务、以及存储引擎都集中于此,除此之外还包括一个REST 服务器来响应各种客户端请求。

扩展插件: 各种提供额外特性的插件,如安全认证、SSO等

完整性组件: Job管理器,ETL、监控以及报警

交互界面: 基于Kylin Core之上的用户交互界面

驱动: 提供了JDBC以及ODBC的连接方式

kylin Cube 多维数据的计算

Kylin的多维计算主要是体现在OLAP Cube的计算。Cube由多个Cuboid组合而成,Cuboid上的数据是原始数据聚合的数据,因此创建Cube可以看作是在原始数据导入时做的一个预计算预处理的过程。Kylin的强大之处在于充分利用了Hadoop的MapReduce并行处理的能力,高效处理导入的数据。

Kylin的数据来自于Hive,并作为一个Hive的加速器希望最终的查询SQL类似于直接在Hive上查询。因此Kylin在建立Cube的时候需要从Hive获取Hive表的元数据。虽然有建立Cube的过程,但是并不想对普通的查询用户暴露Cube的存在。

Kylin创建Cube的过程如下图所示:

Kylin 大数据时代的OLAP利器

根据Cube定义的事实表以及维度表,利用Hive创建一张宽表

抽取事实表上的维度的distinct值,将事实表上的维度以字典树方式压缩编码成目录,将维度表以字典树的方式编码

利用MapReduce从第一步得到的宽表文件作为输入,创建 N-Dimension cuboid,然后每次根据前一步的结果串行生成 N-1 cuboid, N-2 cuboid … 0-Cuboid

根据生成的Cuboid数据量计算HTable的Region分割策略,创建HTable,将HFile导入进来

Kylin与传统的OLAP一样,无法应对数据Update的情况(更新数据会导致Cube的失效,需要重建整个Cube)。面对每天甚至每两个小时这样固定周期的增量数据,Kylin使用了一种增量Cubing技术来进行快速响应。

Kylin的Cube可以根据时间段划分成多个Segment。在Cube第一次Build完成之后会有一个Segment,在每次增量Build后会产生一个新的Segment。增量Cubing依赖已有的Cube Segments和增量的原始数据。增量Cubing的步骤和新建 Cube的步骤类似,Segment之间以时间段进行区分。

增量Cubing所需要面对的原始数据量更小,因此增量Cubing的速度是非常快的。然而随着Cube Segments的数目增加,一定程度上会影响到查询的进行,所以在Segments数目到一定数量后可能需要进行Cube Segments的合并操作,实际上merge cube是合成了一个新的大的Cube Segment来替代,Merge操作是一个异步的在线操作,不会对前端的查询业务产生影响。。

评论0 赞同0
  •  加载中...

最新活动

您已邀请0人回答 查看邀请

我的邀请列表

  • 擅长该话题
  • 回答过该话题
  • 我关注的人
向帮助了您的网友说句感谢的话吧!
付费偷看金额在0.1-10元之间
<