Apache Kylin
概述
kylin是一个多维度分析处理(MOLAP)系统,用java语言编写。它能提供交互式SQL秒级内巨大的Hive表分析查询。
简单的来说Kylin的核心思想就是预计算,即对多维分析可能用到的度量进行预计算,将计算好的结果封装成Cube,存于hbase中,供查询时直接访问。把高复杂度的聚合运算、多表连接等操作转换成对预计算结果的查询,这决定了Kylin能够拥有很好的快速查询和高并发能力。
之后Kylin就可以将标准的SQL查询,转换成对HBase的Scan,快速查到结果返回给请求方。
理论基础是:以空间换时间,需要大量的存储空间(原数据量的10+倍),因此压缩在Kylin的使用过程中尤为重要。
环境
一、软件要求
- Hadoop: 2.7+
- Hive: 0.13 - 1.2.1+
- HBase: 1.1+
- Spark (可选) 2.1.1+
- Kafka (可选) 0.10.0+
- JDK: 1.7+
- OS: Linux only, CentOS 6.5+ or Ubuntu 16.0.4+
在 Hortonworks HDP 2.2 - 2.6, Cloudera CDH 5.7 - 5.11, AWS EMR 5.7 - 5.10, Azure HDInsight 3.5 - 3.6 上测试通过
二、硬件要求
运行 Kylin 的服务器的最低的配置为 4 core CPU, 16 GB memory 和 100 GB disk。 对于高负载的场景,建议使用 24 core CPU, 64 GB memory 或更高的配置
部署
一、下载
wget http://www-us.apache.org/dist/kylin/apache-kylin-2.3.1/apache-kylin-2.3.1-hbase1x-bin.tar.gz
二、解压并配置环境变量
tar -zxvf apache-kylin-2.3.1-hbase1x-bin.tar.gz
cd apache-kylin-2.3.1-bin
export KYLIN_HOME=`pwd`
三、检查
确保用户有权限在 shell 中运行 hadoop, hive 和 hbase cmd
$KYLIN_HOME/bin/check-env.sh
四、启动
1. 通过kylin.sh start 启动kylin,运行时日志$KYLIN_HOME/logs/kylin.log;
$KYLIN_HOME/bin/kylin.sh start
2. Kylin 启动后可以通过浏览器 http://hostname:7070/kylin 查看。初始用户名和密码是 ADMIN/KYLIN;
3. 运行 $KYLIN_HOME/bin/kylin.sh stop 脚本,停止 Kylin。
4. 运行官方样例sample.sh来创建一个cube (注意:用户必须有hdfs的权限)
样例运行成功界面;根据提示可以重启kylin或者重新加载元数据来看到创建的cube;登陆到kylin的web界面(启动成功时有地址提示);用户名/密码:ADMIN/KYLIN;登陆后进行重新加载元数据的操作:
完成后可以在web界面中build这个cube来触发它:
需要输入一个分区的截至时间,这个字段是sales表中的日期字段,官方样例的表中这个字段的范围是(2012-01-01~2014-01-01)选择之后submit即可;
可以看到cube在构建过程的这个job任务的每一步的详细执行动作:
至此,kylin就可以正常使用了。
Kylin Cube构建详解
- 创建项目
- 同步hive表
- 创建Model
1. 填写Model的基本信息:名字,描述
2.1 选择一张事实表(就是要分析的表)
2.2.1 选择维度表(比如时间维度表,地区维度表)
2.2.2 选择与主表的关联方式以及关联条件
3. 选择维度(如年月日维度,国家维度)
4. 选择计算的指标(如价格)
5.1 选择分区字段(暂时只支持日期字段)
5.2 选择过滤方式,过滤掉脏数据
这个过程就是将分析表与维度表关联成一张宽表,并做一些基本的过滤
- 创建Cube
1.1 选择基于哪一个Model来构建Cube
1.2 Cube名字
1.3 Cube执行后邮件通知设置
2. 选择维度(这个字段就是group by的字段)
3. 选择对指标的计算方式(sum,avg等聚合函数)
4.1 自动合并的阈值
4.2 保留cube的阈值(单位是天,设置为0永久保存)
4.3 分区开始时间默认值设置
5.1 聚合的字段
5.2 存入Hbase表中的rowkey设计(默认是以维度组合后的字典编码)
5.3 高级字典设置(看官方的文档应该是在count_distinct时候用到的,对这个还没有研究)
6. Cube构建时的参数设置。如Hbase压缩格式设置等
最后保存。至此一个完整的cube构建完成,可以通过bulid触发来执行。