1.kylin 理论

教程 阿布都的都 ⋅ 于 2023-01-07 14:23:36 ⋅ 535 阅读

1 kylin概述

​ Apache Kylin™是一个开源的、分布式的分析型数据仓库,提供Hadoop/Spark 之上的 SQL 查询接口及多维分析(OLAP)能力以支持超大规模数据,最初由 eBay 开发并贡献至开源社区。它能在亚秒内查询巨大的表。

​ 国内有个kylingence公司, 将Kylin 商业化,是对开源版本的优化。

Kylin 的核心思想:预计算 + 以空间换时间。

​ 将要从hive查询的各种统计结果,先计算出来,将计算好的结果保存成Cube(数据立方体)并存储到hbase中,供查询时直接访问。把高复杂度的聚合运算,多表连接等操作转换成对预计算结果的查询。

file

​ Kylin令使用者仅需三步即可实现:

1)根据需求,确定事实表,确定事实表中要按照哪些维度来统计,统计哪些度量。

​ 事实表:业务表,有多个维度组成。比如:用户安装应用表(维度:用户、国家、更新时间等)、用户访问表(维度:用户、时间、地区)。

​ 维度:对业务表按照什么统计, 什么字段就是维度,相当于 group by 的字段

​ 度量:统计的信息,比如 count, sum , max, count(distinct ) 等。

2)基于第一步,构建数据立方体cube,并进行预计算,将结果存入hbase

​ 这步有点像 group by 里的 with cube, 比如有2个group by字段,那有4种组合,基于这4种组合,实现多维度统计。

3)使用标准 SQL 通过 ODBC、JDBC 或 RESTFUL API 进行查询,仅需亚秒级响应时间即可获得查询结果。

​ 在kylin 写SQL查询,kylin去hbase中给你找算好的结果。

​ 可用一些可视化工具写SQL给kylin, kylin去hbase中给你找算好的结果, 一些和kylin相关的可视化工具:Tableau,PowerBI ,starmtbi, superset。

2 kylin架构设计

file

  • rest server

    ​ REST Server是一套面向应用程序开发的入口点,旨在实现针对Kylin平台的应用开发工作,此类应用程序可以提供查询、获取结果、触发cube构建任务、获取元数据以及获取用户权限等等,可以通过Restful接口实现SQL查询。

  • query engine

    ​ 查询引擎获取并解析用户查询SQL,将查询结果返回。

  • routing

    ​ 负责将解析的SQL生成的执行计划转换成cube缓存的查询,cube是通过预计算缓存在HBase中,这部分查询可以在秒级甚至毫秒级完成,还有一些操作使用过的原始数据(存储在Hadoop的hdfs中通过hive查询),这部分查询延迟较高。

  • metadata

    ​ 元数据管理工具,Kylin是一款元数据驱动型应用程序,元数据管理工具是一大关键性组件,用于保存在Kylin当中的所有元数据进行管理,其中包括最为重要的cube元数据(包括cube的定义、模型的定义、job的信息、job的输出信息、维度的directory信息等),Kylin的元数据和cube都存储在HBase中。

  • cube build engine

    ​ 用于处理所有离线任务,其中包括shell脚本、Java API以及MapReduce任务等等,任务引擎对Kylin当中的全部任务加以管理与协调,从而确保每一项任务都能得到切实执行并解决期间出现的障碍。

  • hbase as storage

    ​ 管理底层存储,特别是cuboid,其以键值对的形式进行保存,存储引擎使用的是HBase,Kylin也可以通过扩展实现对其它键值系统的支持,例如Redis。

3 kylin基本概念

  • table

    ​ 表,表定义在Hive中,是Data cube (数据立方体)的数据源。

    ​ 在build cube之前,Hive表必须同步在Kylin中。

  • cardinality

    ​ 维度基数,在cube设计中非常关键,是指一个数据集中一个维度下数据的个数(distinct dimension),当维度基数超过一百万则被称为超高基(Ultra High Cardinality, UHC)。

    ​ 比如:用户安装应用表中,不同用户数(count(distinct aid)), 不同国家数(count(distinct country))

  • model

    ​ 模型,用来定义一个Fact Table(事实表)和多个Lookup Table(查找表),及所包含的dimension(维度)列、Messures(度量)列、partition(分区)列和date(日期)格式。

  • cube

    ​ 数据立方体,这里面会包含所有的组合可能。

    ​ 定义了使用的模型、模型中的表的维度(dimensions)、度量(messures)、如何对段分区( segments partitions)、合并段(segments auto-merge)等的规则。

    ​ 1个cube --- N个cuboid

file

​ 如上就为一个cube,这个cube共分为三个维度,分别为品牌、年份、国家,如果我们计算的是市场销量,那么就可以组合出各种情况的销量,如,2011年华为手机在美国的销售情况。

  • cube segments

    ​ 它是cube构建后的数据载体,一个segment映射HBase中的一张表,cube实例构建后,会产生一个Segment。

  • dimension

    ​ 维度,是用来描述实体的,一般是group by的字段,比如用户安装应用表中的用户、国家、时间字段。

  • measures

    ​ 度量,度量就是被聚合的统计值,也是聚合运算的结果,一般指聚合函数。

    ​ 比如:sum, max, count, count(distinct), topN等。

  • fact table

    ​ 事实表,业务表,有多个维度组成。其列一般有两种,分别为包含事实数据的列,包含维度主键列。

    ​ 比如:用户安装应用表(维度:用户、国家、时间等)、用户访问表(维度:用户、时间、地区)。

  • lookup table

    ​ 查找表,是对事实表中个别列的额外描述(不是必须的)。

    ​ 比如:国家字典表,可以和 用户安装应用表的国家码join。

  • dimension table

    ​ 维度表,由Fact table和Lookup table抽象出来的表,包含了多个相关的列,以提供对数据不同维度的观察,其中每列的值的数目称为Cardinatily。

    ​ 比如:用户安装应用表 join 国家字典表 后, 得到的结果集, 可以计算安装国家名称的统计信息。

4 cube构建流程

file

版权声明:原创作品,允许转载,转载时务必以超链接的形式表明出处和作者信息。否则将追究法律责任。来自海汼部落-阿布都的都,http://hainiubl.com/topics/76079
成为第一个点赞的人吧 :bowtie:
回复数量: 0
    暂无评论~~
    • 请注意单词拼写,以及中英文排版,参考此页
    • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
    • 支持表情,可用Emoji的自动补全, 在输入的时候只需要 ":" 就可以自动提示了 :metal: :point_right: 表情列表 :star: :sparkles:
    • 上传图片, 支持拖拽和剪切板黏贴上传, 格式限制 - jpg, png, gif,教程
    • 发布框支持本地存储功能,会在内容变更时保存,「提交」按钮点击时清空
    Ctrl+Enter