Kylin

1 篇文章 0 订阅
1 篇文章 0 订阅

Kylin前世今生

Apache Kylin背景

Apache Kylin(麒麟)是一个开源的分布式存储引擎,最初由ebay开发贡献置开源社区,它提供Hadoop智商的sql查询接口以及多维分析(OLAP)能力以支持大规模数据,能够处理TB乃至PB级别的分析任务,能够在亚秒级查询巨大的hive表,并支持高并发。

值得一题的是Apache Kylin 于2014年10月在github开源,并很快在2014年11月加入Apache孵化器,2015年9月与spark、hbase、kafka并列荣获info World 2015年Bossie最佳开源大数据工具奖,这是国人项目第一次获得该国际大奖,与2015年11月毕业,成为Apache顶级项目,是首个完全由中国团队设计开发的Apache顶级项目。

应用场景

  1. 假如你的数据存在hadoop的HDFS分布式文件系统中,并且你使用hive来基于HDFS构建数据仓库系统,并进行分析数据,但是数据量巨大,比如PB级别。
  2. 同时你的haoop平台也使用Hbase进行数据存储和利用Hbase的行健实现数据的快速查询等。
  3. 你的hadoop平台的数据量逐日累增。
  4. 对于数据分析的维度大概10个左右。
    Apache Kylin的核心思想是利用空间换时间,将计算好的多为数据结果存在Hbase ,实现数据的快速查询。同时,由于Apache Kylin在查询方面制定了多种灵活的策略,进一步提高空间的利用率,使得这样的平衡策略在应用中值得采用

Kylin前奏

为了更好的了解kylin我们可以先普及如下概念

事实表和维度表

FactTable(事实表):事实表是用来记录具体的事件的,包含了每个事件的具体要素,以及具体发生的事情。
DimensionTable(维度表):维度表则是对事实表中事件要素的描述信息。
例如:订单表是事实表,地区表、时间表、品类表这些相对于订单表就是维度表。

星型模型和雪花模型

星型模型:星型模型是一种多维的数据关系,它是由一个或多个事实表和一组维表组成,所有的维表都直接连接在事实表上,每个维表都有一个维作为主键,所有维表的主键组合成事实表的主键。
雪花模型:雪花模型当有一个或多个维表没有直接连接到事实表中,而是通过其它的维表连接到事实表中,这个时候图多得就像雪花连在一起,故称雪花模型。

  1. 雪花模型是对星型模型的扩展,例如存在A国B省C市和A国B省D市的俩条记录相对于A国B省的信息存储了俩次星型模型存在冗余,雪花模型则极大的减少了冗余
  2. 同时也不难理解,雪花模型结构去除了数据冗余,但是在进行事实表和维度表之间的连接查询的时候其效率就比星型模型低了。所以在冗余可以接收的情况下,实际运用中还是星型模型的使用更多,也更有效率。

维度和度量

维度就是事实表和维表中的属性比如时间、产品类别、产品名这种,度量则一般会记录事件的相应数值比如销售数量、销售额等。

OLAP

  • ROLAP(Relational on-Line Analysis Processing) 基于关系型数据库到关系型数据库的多维分析统计,不需要预计算
  • MOLAP(Multidimensional on-Line Analysis Processing) 基于多维数据集(即cube数据立方体)到多为数据集的,需要预计算
  • HOLAP (Hybrid n-Line Analysis Processing)基于关系型数据库到多维数据集的。
    kylin 属于MOLAP

Data Cube(数据立方体)

Cube数据立方体只是对多维模型的形象说法,从表面上看数据立方体是三维的,但是多维模型不仅仅限于三维模型,可以组合更多的模型,比如四维、五维等。
在Kylin中在生成Cube的过程中,将所有维度组合即dimensions的不同组合,在Apache Kylin中成为cuboid,比如包含n个dimensions的cube有2^n次方和cuboid

Apache Kylin的工作原理和体系架构

Kylin的工作原理

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

  • cuboid:Kylin中将维度任意组合成为一个Cuboid
  • cube: Kylin中将所有维度的组合成为一个cube,即包含所有cuboid。

假设我们有4个Dimension,这个cube中每个节点都是这个4个Dimension的不同组合,每个组合定义了一组分析的Dimension,measure的聚合结果就保存在这每个cuboid上,查询时根据sql找到对应的cuboid,读取measure的值即可返回。

Kylin的体系架构

kylin的架构图

  • 模块一 hadoop/hive Kylin是一个MOLAP系统,其将hive中的数据进行预计算,利用Hadoop中的MapReduce分布式计算框架来实现。
  • 模块二 HBase HBase是Kylin中用来存储OLAP分析cube数据的地方,实现多为数据集的交互式查询。
  • 模块三 Kylin的核心模块
  1. Rest Server
    提供Restful接口,可以通过该接口来创建cube、构建cube、刷新cube、合并cube等相关操作。另外还有Kylin的Projects、Tables等元数据管理,用户访问权限控制,系统参数动态配置或修改等。
  2. Query Engine
    目前的Kylin使用开元的Calcite框架试下SQL解析可以理解为SQL引擎层。
  3. Routing
    负责将解析SQL生成的执行计划转换撑cube缓存的查询,cube是通过预计算缓存在HBase中,这部分查询是可以在秒级甚至毫秒级完成,还有操作查询过原始存在HDFS上的数据(使用hive查询),这部分查询的延迟比较高。
  4. Metadata
    Kylin中有大量的元数据信息,包括cube的定义、星型模型的定义、job和执行job的输出信息、模型的维度信息等。Kylin的元数据和cube都存储在HBase中,存储的格式是json字符串。
  5. Cube Build Engine
    这个模块比较重要,它是所有模块的基础,主要负责Kylin预计算中创建cube,创建的过程首先通过读取hive中的原始数据,然后通过一些MR或Spark计算生成Htable,最后将数据load到HBase表中
  • 模块四 Kylin提供的接口
    这部分模块主要是提供了Restful API和JDBC/ODBC接口,方便第三方Web APP产品和基于SQL的BI工具的接入,比如Apache Zeppelin、Tableau、Power BI等。
    Kylin提供的JDBC驱动的classname为org.apache.kylin.jdbc.Driver,使用的URL的前缀jdbc:kylin:,使用JDBC接口的查询走的流程和使用RESTFul接口查询走的内部流程是相同的。这类接口也使得Kylin很好地兼容tebleau甚至mondrian。

Kylin cube构建流程

  1. 第一步创建中间表:原始表中有事实表和维度表,将其维度和度量分别提出,作成一张宽表为中间表
    例如
addresscatogorydateprice
北京电子2010-01-01169
上海交通2010-01-02170
  1. 第二步将中间表的数据均匀分配到不同的文件(解决第一步的MR倾斜,后面具体讲)
  • 首先计算出中间表的总行数
  • per mapper=100w 注:为什么100w 引用官网上的一句话

1 millions data size small than HDFS block size

  • 计算出reduce的个数
select * from kylin_intermediate_airline_cube Distribute by RNAD();

说下对这个sql的理解by RAND指的是随机分区,如果指定字段,则相同的字段会在同一分区。

  1. 第三步 创建维度字典表(全部改为数字对应)
addressvaluecatogoryvaluedatevalue
北京0电子02010-01-010
上海1交通12010-01-021

要创建字典表每个维度的distinct取出来,存字典表(中间表)节省空间。

  1. 第四步 构建cube
    预聚合表
addresscatogorydateprice
000100
1×0500
110600
  1. 创建hbase的k-v
rowkeyvalue
111+000100
101+10500
111+11600

111+000 前半部分111代表三个维度都存在,000代表维度值为000

  1. 第六步 将cube data转成HFile 并导入hbase(转换文件格式就好)
    cube data (sequence File)-> HTable (HFile)
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
对于计算机专业的学生而言,参加各类比赛能够带来多方面的益处,具体包括但不限于以下几点: 技能提升: 参与比赛促使学生深入学习和掌握计算机领域的专业知识与技能,如编程语言、算法设计、软件工程、网络安全等。 比赛通常涉及实际问题的解决,有助于将理论知识应用于实践中,增强问题解决能力。 实践经验: 大多数比赛都要求参赛者设计并实现解决方案,这提供了宝贵的动手操作机会,有助于积累项目经验。 实践经验对于计算机专业的学生尤为重要,因为雇主往往更青睐有实际项目背景的候选人。 团队合作: 许多比赛鼓励团队协作,这有助于培养学生的团队精神、沟通技巧和领导能力。 团队合作还能促进学生之间的知识共享和思维碰撞,有助于形成更全面的解决方案。 职业发展: 获奖经历可以显著增强简历的吸引力,为求职或继续深造提供有力支持。 某些比赛可能直接与企业合作,提供实习、工作机会或奖学金,为学生的职业生涯打开更多门路。 网络拓展: 比赛是结识同行业人才的好机会,可以帮助学生建立行业联系,这对于未来的职业发展非常重要。 奖金与荣誉: 许多比赛提供奖金或奖品,这不仅能给予学生经济上的奖励,还能增强其成就感和自信心。 荣誉证书或奖状可以证明学生的成就,对个人品牌建设有积极作用。 创新与研究: 参加比赛可以激发学生的创新思维,推动科研项目的开展,有时甚至能促成学术论文的发表。 个人成长: 在准备和参加比赛的过程中,学生将面临压力与挑战,这有助于培养良好的心理素质和抗压能力。 自我挑战和克服困难的经历对个人成长有着深远的影响。 综上所述,参加计算机领域的比赛对于学生来说是一个全面发展的平台,不仅可以提升专业技能,还能增强团队协作、沟通、解决问题的能力,并为未来的职业生涯奠定坚实的基础。
对于计算机专业的学生而言,参加各类比赛能够带来多方面的益处,具体包括但不限于以下几点: 技能提升: 参与比赛促使学生深入学习和掌握计算机领域的专业知识与技能,如编程语言、算法设计、软件工程、网络安全等。 比赛通常涉及实际问题的解决,有助于将理论知识应用于实践中,增强问题解决能力。 实践经验: 大多数比赛都要求参赛者设计并实现解决方案,这提供了宝贵的动手操作机会,有助于积累项目经验。 实践经验对于计算机专业的学生尤为重要,因为雇主往往更青睐有实际项目背景的候选人。 团队合作: 许多比赛鼓励团队协作,这有助于培养学生的团队精神、沟通技巧和领导能力。 团队合作还能促进学生之间的知识共享和思维碰撞,有助于形成更全面的解决方案。 职业发展: 获奖经历可以显著增强简历的吸引力,为求职或继续深造提供有力支持。 某些比赛可能直接与企业合作,提供实习、工作机会或奖学金,为学生的职业生涯打开更多门路。 网络拓展: 比赛是结识同行业人才的好机会,可以帮助学生建立行业联系,这对于未来的职业发展非常重要。 奖金与荣誉: 许多比赛提供奖金或奖品,这不仅能给予学生经济上的奖励,还能增强其成就感和自信心。 荣誉证书或奖状可以证明学生的成就,对个人品牌建设有积极作用。 创新与研究: 参加比赛可以激发学生的创新思维,推动科研项目的开展,有时甚至能促成学术论文的发表。 个人成长: 在准备和参加比赛的过程中,学生将面临压力与挑战,这有助于培养良好的心理素质和抗压能力。 自我挑战和克服困难的经历对个人成长有着深远的影响。 综上所述,参加计算机领域的比赛对于学生来说是一个全面发展的平台,不仅可以提升专业技能,还能增强团队协作、沟通、解决问题的能力,并为未来的职业生涯奠定坚实的基础。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值