Kyin 入门学习

1.Kylin 简介

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

2.Kylin    优势

 

3.事实表和维度表

事实表(Fact Table)是指存储有事实记录的表,如系统日志、销售记录、传感器数值等;事实表的记录是动态增长的,所以它的体积通常远大于维度表

 

维度表(Dimension Table)或维表,也成为查找表(Lookup Table),是与事实表相对应的一种表;它保存了维度的属性值,可以跟事实表做关联;相当于将事实表上经常重复的属性抽取、规范出来用一张表进行管理。常见的维度表有:日期表(存储与日期对应的周、月、季度等属性)、地区表(包含国家、省/州、城市等属性)等。维度表的变化通常不会太大。使用维度表有许多好处:

缩小了事实表的大小

便于维度的管理和维护,增加、删除和修改维度的属性,不必对事实表的大量记录进行改动

维度表可以为多个事实表重用

 

4.多维数据模型

星形模型(Star Schema:它的特点是只有一张事实表,以及零到多个维度表,事实表与维度表通过主外键相关联,维度表之间没有关联,就像许多小星星围绕在一颗恒星周围,所以名为星形模型;低版本kylinmodel就是由星形模型定义的;

雪花模型(SnowFlake Schema:就是将星形模型中的某些维表抽取成更细粒度的维表,然后让维表之间也进行关联,这种形状酷似雪花的的模型称为雪花模型。

 

星座模型:还有一种更为复杂的模型,具有多个事实表,维表可以在不同事实表之间公用;高版本kylinmodel支持星座模型定义。

 

5. 维度和度量

    对于N个维度,组合就是2的N次方

    例如;ABCD四个维度:

     ABCD的组合Cubid编码:1111

    ABC的组合Cubid编码:1110

 

6.Cuboid  与cube

所有维度组合的Cuboid作为一个整体,被称为Cube

7.Kylin 可插拔式架构

Hive数据源    计算引擎   ,Hbase  存储引擎

  通过MapReduce  计算

      

kylin由以下几部分组成:

· REST Server:提供一些restful接口,例如创建cube、构建cube、刷新cube、合并cubecube的操作,projecttablecube等元数据管理、用户访问权限、系统配置动态修改等。除此之外还可以通过该接口实现SQL的查询,这些接口一方面可以通过第三方程序的调用,另一方也被kylinweb界面使用。

  · jdbc/odbc接口:kylin提供了jdbc的驱动,驱动的classnameorg.apache.kylin.jdbc.Driver,使用的url的前缀jdbc:kylin:,使用jdbc接口的查询走的流程和使用RESTFul接口查询走的内部流程是相同的。这类接口也使得kylin很好的兼容tebleau甚至mondrian

  · Query引擎:kylin使用一个开源的Calcite框架实现SQL的解析,相当于SQL引擎层。

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

  · Metadatakylin中有大量的元数据信息,包括cube的定义,星状模型(model)的定义、job的信息、job的输出信息、维度的directory信息等等,元数据和cube都存储在hbase中,存储的格式是json字符串,除此之外,还可以选择将元数据存储在本地文件系统。

  · Cube构建引擎:这个模块是所有模块的基础,它负责预计算创建cube,创建的过程是通过hive读取原始数据然后通过一些mapreduce计算生成Htable然后loadhbase中。

8.cube步骤

1. 建立Hive宽表:宽表的建立是在模型的定义的基础上,根据cube的定义去除一些不需要的字段而形成的表。

2. 建立字典:   kylin为了节省空间,会对维度字段进行编码,其中字典就是编码的一种形式。

    

 

9.如何构建cube

   

Layer Cubing(层级构建):按照dimension数量从大到小的顺序,从Base Cuboid开始,依次基于上一层Cubeid的结果进行再聚合。每一层的计算都是一个单独的MapReduce任务

 

逐层算法,启动N+1MapReduce计算:

第一轮,读取原始数据,去掉不相关的列,只保留相关的列。同时对维度列进行压缩编码,计算出ABCD组合,即base cuboid

此后每一轮MapReduce,输入是上一轮的输出,以重用之前的计算结果,去掉要聚合的维度,算出新的Cuboid,直到最后算出所有的Cubeid

 

Cube存储:

RowKey  的具体格式:  cuboid id +具体的维度值

HBase KV存储

Cuboid 的维度和指标如何转换为HBaseKV结构:

简单的说Cuboid的维度会映射为HBaseRowkeyCuboid的指标会映射

HBaseValue。如图所示:

    

自定义Cube和优化:

随着维度数目的增加Cuboid的数量会爆炸式地增长,不仅占用大量的存储空间还会延长Cube的构建时间。为了缓解Cube的构建压力,减少生成的Cuboid数目,Kylin引入了一系列的高级设置,帮助用户筛选出真正需要的Cuboid。这些高级设置包括聚合组(Aggregation Group)、联合维度(Joint Dimension)、层级维度(Hierarchy Dimension)和必要维度(Mandatory Dimension)等,还有一个可优化维度的配置衍生维度

Derived)。例如ABCD组成的cube,如下图:

Apache Kylin典型的应用场景如下:

  • 用户数据存在于Hadoop HDFS中,利用Hive将HDFS文件数据以关系数据方式存取,数据量巨大,在500G以上
  • 每天有数G甚至数十G的数据增量导入
  • 有10个左右为固定的分析维度

     

   Jdbc访问:

Driver driver = (Driver) Class.forName("org.apache.kylin.jdbc.Driver").newInstance();

        Properties info = new Properties();
        info.put("user", "ADMIN");
        info.put("password", "KYLIN");
        Connection conn = driver.connect("jdbc:kylin://localhost:8087/learn_kylin", info);
        Statement state = conn.createStatement();
        String sql =
        "SELECT " +
        "sum(PRICE),MAX(PRICE) " +
        "        ,CATEG_LVL2_NAME " +
        "from KYLIN_SALES T1 " +
        "inner join 	KYLIN_CAL_DT T2 " +
        "on T1.PART_DT = T2.CAL_DT " +
        "inner join KYLIN_CATEGORY_GROUPINGS T3 " +
        "on T1.LEAF_CATEG_ID = T3.LEAF_CATEG_ID AND " +
        "T1.LSTG_SITE_ID = T3.SITE_ID " +
        "GROUP BY CATEG_LVL2_NAME " ;
        ResultSet resultSet = state.executeQuery(sql);

        while (resultSet.next()) {
            System.out.println(resultSet.getString(1) + "   " + resultSet.getString(2) + " " + resultSet.getString(3));
        }

参考资料:

kylin官方文档:http://kylin.apache.org/cn/docs15/tutorial/create_cube.html

Kylin源码:https://github.com/apache/kylin/tree/kylin-1.5.2.1

Kylin介绍:http://www.cnblogs.com/honey01/p/8351145.html

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值