大数据开发学习(Kylin)

一 Kylin介绍

kylin是一款OLAP工具,背靠Hadoop,HBase,Spark,Kafka等大山,提供神奇体验。

Kylin 安装与启动

除了常规环境,还需要hadoop的historyjobserver启动。

具体参见官网,启动较为容易。

度量计算

目前提供9种计算方法。

  1. sum

  2. min

  • max
  • count
  • count_distinct
  • top_n
  • raw
  • extended_column
  • percentile

建模心得

在通过星形模型建立事实表+维度表的过程中,操作比较复杂。但是,通过view的方式,就比较简单。

view建模的方式,所有结果都在一张表里,只需要对该表进行维度和度量的划分即可。

建模结果

测试结果1:

测试结果2:

实际问题

问题1:在同一个project里的Insight,可以看到所用cube的维度,但是不能共用,会报:No model found for rel

问题2:kylin不支持复杂的列,比如map,array类型。问题参见:
https://mail-archives.apache.org/mod_mbox/kylin-dev/201512.mbox/%3C565D565C.3060205@jd.com%3E

解决方法:创建该表的视图,剔除复杂列

问题3:kylin建model时,想做增量构建,在指定某列时间作为partition时,该列内容应该满足‘yyyy-MM-dd HH:mm:ss’的样子,不要使用unix_timestamp的类型。否则,构建后cube大小为零。

问题4:kylin建cube所用的字段最好不要采用kylin 关键字,例如:year, month, day, hour等。否则写SQL时,不太友好。例如:

想查一段 简单的pv和uv SQL,
select platform, year, month, day ,count(*) as pv count(distinct guid) as uv from kylin_tracking_view group by platform, year, month, day 

在Kylin的查询界面中,应当这么写:
select platform,
    "YEAR",
    "MONTH",
    "DAY",
    count(*) as pv,
    count(distinct guid) as uv
from kylin_tracking_view 
group by 
platform,
    "YEAR",
    "MONTH",
    "DAY"

可以看出,关键词必须全部大写,且被双引号(必须是双引号,单引是自定义常量)包住。

建议提前规范好数据源,免得造成巨大的返工。

问题5:build维度过不去
具体报错: [BadQueryDetector] service.BadQueryDetector:160 : System free memory less than 100 MB. 0 queries running

暂无解决办法。

这个问题可能是,kylin维度较多,把regionserver搞成僵死,进而导致的。

问题6: kylin 不支持中文列名。kylin在创建中间表时,会使用中文+英文的方式做拼接,这个过程会报错。

问题7:kylin 2.2.0 版本用户相关比较难搞。默认账户 ADMIN有问题,暂无好的解决办法。
一种解决方式:升级到 2.3.0版本,修复了230个bug,对用户更加友好。

问题8:kylin 2.3以后采用spark 2.1.2版本,需要进行相关的配置。
解决方式:https://kylin.apache.org/docs23/tutorial/cube_spark.html

Kylin的一些问题

基础

关于Kylin的架构和原理,有图可供参考:Kylin 的架构和原理

Kylin比较详细的介绍:Kylin对大数据量的多维分析

关于Kylin Cube构建原理,落地到HBase的过程: Apache Kylin Cube 构建原理

关于Kylin SQL 语法:SQL language

关于Kylin的关键字:
关键字源码

关于一次正常查询的运行原理:Kylin进阶之路

Kylin使用calcite做sql解析,可以参考calcite的语法文档:https://calcite.apache.org/

维度问题

关于维度的聚合组中各个含义,请参考
https://kylin.apache.org/blog/2016/02/18/new-aggregation-group/

Kylin Mandatory Dimension(必要维度):【技术帖】Apache Kylin高级设置: 必要维度 (Mandatory Dimension)原理解析

Kylin Hierarchy Dimension(层级维度):【技术帖】Apache Kylin 高级设置:层级维度(Hierarchy Dimension)原理解析

Kylin Joint Dimension(联合维度):【技术帖】Apache Kylin 高级设置:联合维度(Joint Dimension)原理解析

Kylin Aggregation Group(聚合组):【技术帖】Apache Kylin 高级设置:聚合组(Aggregation Group)原理解析

Server端

配置负载均衡:【技术贴】如何部署Apache Kylin集群实现负载均衡?

进阶优化

Kylin cube算法:Apache Kylin的快速数据立方体算法——概述

Kylin cube介绍:Kylin使用之创建Cube和高级设置

别人的Cube优化案例:Apache Kylin cube优化指南

优化案例:Apache Kylin 深入Cube和查询优化 提升Cube

API开发

脚本触发增量更新:Kylin定时增量build

Kylin+superset 可视化方案案例:Kylin初体验总结

参考

很不错的博文: