kylin初体验-入门介绍

kylin初体验


12月开始,为了提升公司OLAP系统的查询速度,开始接触kylin,前先后后折腾了近三个月。踩了无数的坑,才算是初窥门径。特在此把本身的感悟、理解记录下来,算是从新梳理一边本身的所得,也但愿能给众位正在使用kylin或者打算使用kylin的小伙伴们提供一点帮助😊html

一句话的归纳(个人理解)

kylin将OLAP分析的星型模型schema的全部group by聚合结果存储在HBASE的表中,经过将sql查询转化成对hbase表的聚合操做的方式大大提升查询速度。算法

官方介绍

http://kylin.apache.org/ Apache Kylin™ is an open source Distributed Analytics Engine designed to provide SQL interface and multi-dimensional analysis (OLAP) on Hadoop supporting extremely large datasets, original contributed from eBay Inc.sql

kylin的角色

  • 上层应用shell

    • SQL应用:Zeplin等,经过jdbc/odbc调用kylinapache

    • 第三方应用:经过kylin的restful接口调用kylin缓存

    • BI应用:Saiku+Mondrian, Tabularestful

  • kylin架构

    • 提供jdbc/odbc driver以及restful接口,接受sql查询app

    • 判断sql该从hbase直接查询,仍是该查询原始的hive表ide

    • 提供cube设计、构建、管理的接口和UI

  • 下层基础(kylin 1.2)

    • hadoop 2.4 - hadoop 2.7

    • hive 0.13 - hive 0.14

    • hbase 0.98 - hbase 0.99

    • JDK 1.7+

kylin 架构

kylin 架构图

  • REST Server:提供jdbc/odbc接口以及restful接口

  • Metadata:存储在hbase中的cube相关信息(project信息、hive table 信息、cube Schema…)

  • Routing:处理Rest Server接受到的请求,查询Metadata,判断从hbase取数仍是从hive取数

  • Query Engine:根据Routing 的判断,执行hbase查询或者hive查询,返回数据给REST Server

  • Cube Build Engine:根据metadata中的cube信息,将hive中的数据预计算并写入到hbase

kylin build cube的方法在官网上有详细的介绍,这里再也不赘述

踩过的坑与感悟

  1. kylin 的cube 对于用户是透明的。用户没法直接从cube查询。用户须要写维表与事实表的join语句, kylin负责转译成cube的查询。这点也是kylin和中间表、宽表的一大区别。(中间表、宽表在用户端就让sql变得简单, kylin在执行时让sql变得高效)所以,kylin适合与bi引擎对接。中间表、宽表事宜提供给用户。

  2. kylin对hadoop生态的版本很是敏感,最好不要超出推荐的版本好范围

  3. 搭建kylin时:

    • limit 后面添加一个起始位置,一个数据长度,好比limit 1, 20

    • right outer join

    • left outer join

    • select 不在group by 中的字段

    • count(distinct)

    • insert, update, delete

    • union, union all

    • where exists

    • 须要安装snapy压缩算法,或者将kylin.hbase.default.compression.codec配置为其余已有算法

    • 须要将$HBASE_HOME/conf/hbase-site.xml 中hbasehbase.zookeeper.quorum字段的默认端口2181去除掉

    • 须要用huser用户启动kylin

    • 须要保证kylin服务机器与集群中每台机器的hadoop相关环境变量一致

      kylin执行MR任务时若是报错hcatalog class not found. build cube时集群中每台机器都有一些hive的jar包(好比hive-hcatalog-core***.jar),若是没有,须要合并到$KYLIN_HOME/lib/kylin-jdbc-{version}.jar中。kylin运行时会将这个jar包put到HDFS上。

      对kylin的job进行管理时,经常会由于kylin metadata的缓存致使找不到资源id对应的cube、segment,从而产生一个null pointer错误。解决方法:重启kylin清除缓存,或者修改kylin源码,对job操做中可能出现null pointer的地方作相应处理。

      kylin的官方介绍中,对于出如今hive表可是没有被预处理存储到hbase中的字段的查询,kylin能够直接查询hive。通过在kylin UI中试验,发现kylin并不能找到hive表,会报找不到字段的错误。

      kylin对cube进行按日期分段时,须要提供一个日期字段如图:分区字段选中的字段PAR在hive中须要是Date类型。不然build Cube 不能成功

      kylin对绝大多数SQL语句都有很好的支持,下面列出通过测试kylin不能很好支持的sql语句:

    • limit 后面添加一个起始位置,一个数据长度,好比limit 1, 20right outer joinleft outer joinselect 不在group by 中的字段count(distinct)insert, update, deleteunion, union allwhere exists
相关文章
相关标签/搜索