大数据之国产分布式分析型数据仓库-Kylin知识总结

大数据之国产分布式分析型数据仓库-Kylin知识总结,第1张

数据之国产分布式分析型数据仓库-Kylin知识总结 Kylin 简介 由来
  • Apache Kylin ( Extreme OLAP Engine for Big Data )是一个开源的分布式分析引擎,为 Hadoop等大型分布式数据平台之上的超大规模数据集通过标准 SQL 查询及多维分析( OLAP )功能,提供亚秒级的交互式分析能力。
优势
  • 标准SQL 接口

    • 使用的查询模型是数据源中的关系模型表,一般而言,也就是指 Hive 表,只需要像原来查询Hive表一样编写 SQL
  • 支持超大规模集

    • 使用了 Cube 预计算技术,在理论上, Kylin 可以支撑的数据集大小没有上限,仅受限于存储系统和分布式计算系统的承载能力,并且查询速度不会随数据集的增大而减慢
  • 亚秒级响应

    • 很多复杂的计算,比如连接、聚合,在离线的预计算过程中就已经完成,这大大降低了查询时刻所需要的计算量,提高了响应速度
  • BI 及可视化工具集成

    • 提供了丰富的 API ,以与现有的 BI 工具集成
    • ODBC 接口:与 Tableau 、 Excel 、 Power BI 等工具集成。
    • JDBC 接口:与 Saiku 、 BIRT 等 Java 工具集成。
    • Rest API :与 Javascript 、 Web 网页集成。
工作原理
  • 核心思想是 Cube 预计算,理论基础是空间换时间,利用 cube 计算的结构加速查询

  • 过程

      1. 指定数据模型,定义维度和度量。
      1. 预计算 Cube ,计算所有 Cuboid 并保存为物化视图。
      1. 执行查询时,读取 Cuboid ,运算,产生查询结果。
系统介绍
  • 在线查询

    • 对比之前的 hive ,想要一些计算结果我们可能会写一些脚本实现将结果集算好,但是对应业务复杂,维度变化更多的情况,你用shell 脚本就不好控制了。 Kylin 就是按照你想要的维度给你全部构建好(即说白了你想要怎样的维度组合数据我就帮你算好)。
  • 离线构建

    • 从上方查询系统发送 SQL 进行查询分析,SQL 最终都会来到 Rest 服务层,再转交给查询引擎进行处理。这里需要注意的是, SQL 语句是基于数据源的关系模型书写的,而不是 Cube 。
总结
  • hive 查询时间随着数据量的增长而线性增长, kylin 使用预计算技术打破了这一点,kylin 在数据集规模上的局限性主要取决于维度的个数和基数,而不是数据集的大小,所以Kylin 能更好地支持海量数据集的查询。而也正是预计算技术, kylin 的查询速度非常快,亚秒级响应。
增量Cube Segment
  • Cube 划分为多个 Segment ,每个 Segment 用起始时间和结束时间来标志
  • 代表一段时间内源数据的预计算结果
  • 大部分情况下一个 Segment 的起始时间等于它之前那个 Segment 的结束时间,结束时间等于它后面那个 Segment 的起始时间
  • 同一个 Cube 下不同的 Segment 除了背后的源数据不同之外,其他如结构定义、构建过程、优化方法、存储方式等都完全相同
增量和全量比较
  • 全量构建

    • 每次更新时需要更新整个数据集
    • 查询时不需要合并不同的Segment结果
    • 不需要后续的segment
    • 适合小数据量或全表更新
  • 增量构建

    • 每次对需要更新的范围进行更新,离线计算量较小
    • 查询时需要合并不同的Segment结果
    • 累计一定量segment之后,需要进行合并
    • 适合大数据量的cube
增量构建的前提
  • Cube 的定义必须包含一个时间维度,用来分割不同的Segment,这个维度称为分割时间列
  • 这个时间列可以是 Hive 中的 Date 类型、也可以是 Timestamp 类型或 String 类型
  • Kylin 都要求用户显式地指定分割时间列的数据格式
碎片管理
  • 自动合并

    • 将多个 Segment 合并为一个 Segment

    • Auto Merge Thresholds

      • 允许用户设置几个层级的时间阈值,层级越靠后,时间阈值就越大
    • Retention Threshold

  • 保留Segment

    • 及时清理不再使用的Segment
Kylin优化 剪枝优化
  • 聚合组

    • 强制维度

      • 一个维度定义为强制维度,那么这个分组产生的所有 Cuboid 中每一个 Cuboid 都会包含该维度
    • 层次维度

      • 具有上下级层次关系的维度,例如时间维度和地区维度
    • 联合维度

      • 每个联合中包含两个或更多个维度,如果某些列形成一个联合
      • 这些联合维度要么一 起出现,要么都不出现
  • 衍生维度

    • 用于在有效维度内将维度表上的非主键维度排除掉,并使用维度表的主键(其实是事实表上相应的外键)来替代它们
Rowkey编码优化

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5679519.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存