前提知要(术语):
OLAP和OLTP的区别:
-
OLAP(On-Line Analytical Processing)联机分析处理,也称为面向交易的处理过程,其基本特征是前台接收的用户数据可以立即传送到计算中心进行处理,并在很短的时间内给出处理结果,是对用户操作快速响应的方式之一。应用在数据仓库,使用对象是决策者。OLAP系统强调的是数据分析,响应速度要求没那么高,
也称为: 多维分析
。 -
OLTP(On-Line Transaction Processing)联机事务处理,它使分析人员能够迅速、一致、交互地从各个方面观察信息,以达到深入理解数据的目的。它具有FASMI(Fast Analysis of Shared Multidimensional Information),即共享多维信息的快速分析的特征。主要应用是传统关系型数据库。OLTP系统强调的是内存效率,实时性比较高。
OLAP的两种类型: kylin属于MOLAP需要进行预计算
Cube和Cuboid的概念:
给定一个数据模型,我们可以对其上的所有维度进行聚合,对于 N 个维度来说,组合的所有可能性共有 2^n-1种。对于每一种维度的组合,将度量值做聚合计算,然后将结果保存 为一个物化视图,称为 Cuboid。所有维度组合的 Cuboid 作为一个整体,称为 Cube。
简单点来讲:
就是每一种维度的组合都叫一个Cuboid
, 所有的维度的组合就叫做Cube
1.kylin架构图解:
定义:
Apache Kylin 是一个开源的分布式分析引擎,提供 Hadoop/Spark 之上的 SQL 查询接口 及多维分析(OLAP)能力以支持超大规模数据,最初由 eBay Inc 开发并贡献至开源社区。 它能在亚秒内查询巨大的 Hive 表。
1)REST Server
- REST Server 是一套面向应用程序开发的入口点,旨在实现针对 Kylin 平台的应用开发 工作。 此类应用程序可以提供查询、获取结果、触发 cube 构建任务、获取元数据以及获取 用户权限等等。另外可以通过 Restful 接口实现 SQL 查询。
2)查询引擎(Query Engine)
- 当 cube 准备就绪后,查询引擎就能够获取并解析用户查询。它随后会与系统中的其它 组件进行交互,从而向用户返回对应的结果。
3)路由器(Routing)
- 在最初设计时曾考虑过将 Kylin 不能执行的查询引导去 Hive 中继续执行,但在实践后 发现 Hive 与 Kylin 的速度差异过大,导致用户无法对查询的速度有一致的期望,很可能大 多数查询几秒内就返回结果了,而有些查询则要等几分钟到几十分钟,因此体验非常糟糕。 最后这个路由功能在发行版中默认关闭。
4)元数据管理工具(Metadata)
- Kylin 是一款元数据驱动型应用程序。元数据管理工具是一大关键性组件,用于对保存 在 Kylin 当中的所有元数据进行管理,其中包括最为重要的 cube 元数据。其它全部组件的 正常运作都需以元数据管理工具为基础。 Kylin 的元数据存储在 hbase 中。
5)任务引擎(Cube Build Engine)
- 这套引擎的设计目的在于处理所有离线任务,其中包括 shell 脚本、Java API 以及 MapReduce 任务等等。任务引擎对 Kylin 当中的全部任务加以管理与协调,从而确保每一项任务 都能得到切实执行并解决其间出现的故障。
2.kylin的特点
1)标准 SQL 接口
:(kylin是MOLAP,数据是基于多维数据集的,提供sql接口是值得一提的)Kylin 是以标准的 SQL 作为对外服务的接口。
2)支持超大数据集
:Kylin 对于大数据的支撑能力可能是目前所有技术中最为领先的。 早在 2015 年 eBay 的生产环境中就能支持百亿记录的秒级查询,之后在移动的应用场景中又 有了千亿记录秒级查询的案例。
3)亚秒级响应
:Kylin 拥有优异的查询相应速度,这点得益于预计算,很多复杂的计算, 比如连接、聚合,在离线的预计算过程中就已经完成,这大大降低了查询时刻所需的计算量, 提高了响应速度。
4)可伸缩性和高吞吐率
:单节点 Kylin 可实现每秒 70 个查询,还可以搭建 Kylin 的集 群。
`5)BI 工具集成 Kylin 可以与现有的 BI 工具集成,
具体包括如下内容。 ODBC:与 Tableau、Excel、PowerBI 等工具集成
JDBC:与 Saiku、BIRT 等 Java 工具集成
RestAPI:与 JavaScript、Web 网页集成
Kylin 开发团队还贡献了 Zepplin 的插件,也可以使用 Zepplin 来访问 Kylin 服务
总结: 例: kylin从hive中拿到数据,对所有维度进行组合进行预计算,存储到hbase当中,因此会比较浪费存储空间,以存储空间换时间,实现亚秒级查询;