Apache Kylin™是一个开源的、分布式的分析型数据仓库,提供 Hadoop 之上的 SQL 查询接口及多维分析(OLAP)能力以支持超大规模数据,最初由eBay Inc.开发并贡献至开源社区。
只需要三步,即可实现超大数据集上亚秒级的查询
1、定义数据集上的一个雪花模型或星型模型
2、定义的模型上构建一个cube
3、使用SQL通过ODBC、JDBC 或 RESTFUL API 进行查询,仅需亚秒级响应时间即可获得查询结果
查询出的海量数据存储到Hbase
安装这里涉及的环境太多了,为了方便用户测试,提供了docker镜像。镜像中包含测试表和数据以及
- JDK 1.8
- Hadoop 2.7.0
- Hive 1.2.1
- Hbase 1.1.2 (with Zookeeper)
- Spark 2.3.1
- Kafka 1.1.1
- MySQL 5.1.73
安装工具
sudo yum install -y yum-utils
设置yum仓库地址
sudo yum-config-manager
--add-repo
https://download.docker.com/linux/centos/docker-ce.repo
sudo yum-config-manager
--add-repo
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
更新yum缓存
sudo yum makecache fast
安装docker
sudo yum install -y docker-ce docker-ce-cli containerd.io
检查安装状态
docker info
启动docker
systemctl start docker
查看docker状态
systemctl start docker
设置docker开机自启
systemctl enable docker
设置docker镜像加速
cat <安装kylin/etc/docker/daemon.json { "registry-mirrors": [ "https://docker.mirrors.ustc.edu.cn", "http://hub-mirror.c.163.com" ], "max-concurrent-downloads": 10, "log-driver": "json-file", "log-level": "warn", "log-opts": { "max-size": "10m", "max-file": "3" }, "data-root": "/var/lib/docker" } EOF
拉取镜像
docker pull apachekylin/apache-kylin-standalone:3.1.0
启动容器
docker run -d -m 8G -p 7070:7070 -p 8088:8088 -p 50070:50070 -p 8032:8032 -p 8042:8042 -p 16010:16010 apachekylin/apache-kylin-standalone:3.1.0
- Kylin 页面:http://
:7070/kylin/login - HDFS NameNode 页面:http://
:50070 - YARN ResourceManager http://
:8088 - HBase 页面:http://
:16010
username:ADMIN
passwor:KYLIN
启动了容器之后,会自动导入样例数据,里面含有10000条数据。链接里是字段说明以及表关系,所以千万千万千万不要再导入样例数据啦,启动时已经给你自动导入过了。
kylin样本数据介绍
1、new model
2、定义model的名字
3、定义雪花模型或星型模型中的事实表和维度表
4、选择维度【如果可以的话,能选上就全选上,免得日后缺失数据】
5、选择度量
6、如果是增量导入可以选择这个【表以及日期字段】还可以设置过滤条件
创建cube我的数据都是瞎填的,不要模仿我
1、new cube
2、定义相关信息
3、选择维度
Derived意思是衍生数据、构建cube的时候不会包含它,可以通过层级聚合得到,若经常用到也可以选择normal
4、选择聚合指标
5、这一步为了增量构建cube设计的,分区表做日计算会产生一个cube segment,在hbase就是一张表,那天天查得多少张表,所以要做一个合并。
6、高级设置
Aggregation Groups:只会对组内的字段进行聚合,不同组的字段不会相互聚合,可以大量减少cube
Mandatory Dimensions:必选维度,就是相当于group by字段必有它
Hierarchy Dimensions :层级维度,如省市区,只会聚合出 省、省市、省市区
Joint Dimensions: 联合维度,把两个维度绑定在一起,不会拆开聚合,可以减少一半的cube
可以拖拽维度列去调整其在 rowkey 中位置; 位于rowkey前面的列,将可以用来大幅缩小查询的范围。通常建议将 mandantory 维度放在开头, 然后是在过滤 ( where 条件)中起到很大作用的维度;
encoding选择合适的编码格式
Mandatory Cuboids: 维度组合白名单。确保你想要构建的 cuboid 能被构建。
Cube Engine: cube 构建引擎。有两种:MapReduce 和 Spark。如果你的 cube 只有简单度量(SUM, MIN, MAX),建议使用 Spark。如果 cube 中有复杂类型度量(COUNT DISTINCT, TOP_N),建议使用 MapReduce。
Advanced Dictionaries: “Global Dictionary” 是用于精确计算 COUNT DISTINCT 的字典, 它会将一个非 integer的值转成 integer,以便于 bitmap 进行去重。
Advanced Snapshot Table: 为全局 lookup 表而设计,提供不同的存储类型。
Advanced ColumnFamily: 如果有超过一个的COUNT DISTINCT 或 TopN 度量, 你可以将它们放在更多列簇中,以优化与HBase 的I/O。
7、保存。如果最后出bug,说rowkey个数匹配不上,就查看第三步中的normal的个数和rowkey的个数
构建cube1、点击build
2、点击左上角的moniter可以查看执行过程
数据查询
查询的数据没有构建,会根据之前设置的构建引擎去查询返回数据
curl -X PUT --user ADMIN:KYLIN -H "Content-Type: application/json;charset=utf-8" -d '{ "startTime": 820454400000, "endTime": 821318400000, "buildType": "BUILD"}' http://192.168.10.20:7070/kylin/api/cubes/cube_test/build
日期和路径记得改 cube_test替换成你的cube名称
cube优化衍生维度
join之后的维度表,如果设置成drived,则不参与cuboid计算
聚合组
把不同的维度划分为不同的主体
必选维度
每个预计算cuboid中必须包含必选维度,会成倍降低cuboid个数
层级维度
降低cuboid个数
联合维度
就相当于1:1,在预计算cuboid时,必须同时出现
输出压缩
输入压缩
rowkey优化
调整维度顺序和编码
这里只是教会基础使用,想要了解更多还是去官网看看吧[Apache Kylin | 概述](https://kylin.apache.org/cn/docs31/index.html)



