共计 3112 个字符,预计需要花费 8 分钟才能阅读完成。
前言
Apache Kylin 是一个开源的分布式分析引擎,最初由 eBay 开发贡献至开源社区。它提供 Hadoop 之上的 SQL 查询接口及多维分析(OLAP)能力以支持大规模数据,能够处理 TB 乃至 PB 级别的分析任务,能够在亚秒级查询巨大的 Hive 表,并支持高并发。
Kylin 的理论基础:空间换时间。
Kylin 从数据仓库中最常用的 Hive 中读取源数据,使用 MapReduce 作为 Cube 构建的引擎,并把预计算结果保存在 HBase 中,对外暴露 Rest API/JDBC/ODBC 的查询接口。
部署 Kylin
(一)下载安装
写这篇博客时,最新版为 2.0.0 beta 版, 最新的正式版为 1.6.0, 所以我使用的 1.6.0。
可以直接下载源码包编译安装,也可以根据自己的 hadoop 环境版本下载对应的二进制安装包。
Apache Kylin v1.6.0 正式发布 http://www.linuxidc.com/Linux/2016-12/138224.htm
我使用的是 HDP2.4.2,Hbase 版本是 1.1.2。直接下载的是二进制包安装。
$ cd /opt
$ wget http://ftp.tc.edu.tw/pub/Apache/kylin/apache-kylin-1.6.0/apache-kylin-1.6.0-hbase1.x-bin.tar.gz
$ tar xf apache-kylin-1.6.0-hbase1.x-bin.tar.gz
$ vim /etc/profile
export KYLIN_HOME=/opt/apache-kylin-1.6.0-hbase1.x-bin
$ source /etc/profile
(二)环境检查
$cd /opt/apache-kylin-1.6.0-hbase1.x-bin
$./bin/check-env.sh
KYLIN_HOME is set to /opt/apache-kylin-1.6.0-hbase1.x-binmkdir: Permission denied: user=root, access=WRITE, inode=”/kylin”:hdfs:hdfs:drwxr-xr-xfailed to create /kylin, Please make sure the user has right to access /kylin
# 提示使用 hdfs 用户
#check-env.sh 脚本执行的是检查本地 hive,hbase,hadoop 等环境情况。
# 并会在 hdfs 中创建一个 kylin 的工作目录。
$ su hdfs
$ ./bin/check-env.sh
KYLIN_HOME is set to /opt/apache-kylin-1.6.0-hbase1.x-bin
$ hadoop fs -ls / #多了一个 /kylin 的目录 drwxr-xr-x – hdfs hdfs 0 2017-01-19 10:08 /kylin
(三)启动
$ chown hdfs.hadoop /opt/apache-kylin-1.6.0-hbase1.x-bin
$ ./bin/kylin.sh start
A new Kylin instance is started by hdfs, stop it using “kylin.sh stop”Please visit
You can check the log at /opt/apache-kylin-1.6.0-hbase1.x-bin/logs/kylin.log
(四)进入页面
http://localhost:7070/kylin
user:ADMIN passwd:KYLIN
使用 Kylin
(一)添加新的项目
给项目起一个名字,添加项目描述。
给项目添加数据源(加载 hive 数据表)
在数据源的页面,可以手动填写 hive 表名
成功加载了 resource 表的数据
这时就可以看到对应表的字段属性。
(二)创建 model(模型)
新建 model
编辑 model 名字和描述
选择数据表
接下来选择维度和度量,这是构建预计算模型 cube 中最为重要的两个属性。
度量:度量是具体考察的聚合数量值,例如:销售数量、销售金额、人均购买量。计算机一点描述就是在 SQL 中就是聚合函数。
例如:select cate,count(1),sum(num) from fact_table where date>’20161112’group by cate;
count(1)、sum(num)是度量
维度:维度是观察数据的角度。例如:销售日期、销售地点。计算机一点的描述就是在 SQL 中就是 where、group by 里的字段
例如:select cate,count(1),sum(num) from fact_table where date>’20161112’group by cate;
date、cate 是维度
选择要分析的维度字段
选择要分析的度量字段
设置表中的时间字段
(三)创建 cube(立方体)
Cube 构建需要依赖前面创建的 model。选择 model,设置 cube 名。
从上面 model 设置的维度字段中选择你需要分析的字段。
选择度量。
第一个_COUNT_是默认要计算的。
第二个 COUNT_DISTINCT,可以去重计算得到有多少个 IP 地址,即通常的 UV。
(COUNT_DISTINCT 计算时是有精确度选择的,计算越精准需要的时间就越长)
第三个 TOP_N,是用来计算排名的。
第四个 MAX,是用来计算最大值的
还有其他的 MIN,SUM 等各种计算表达式。
后面的几个基本上就没有什么要设置的了,直接 Next 了,最后保存 cube 就好了。
(四)构建 cube
创建好 cube 之后,我们只是得到了一个计算模型。需要将数据按照我们设定的模型去计算,才能得到相应的结果。
下面开始构建 cube,在 Action 中选择 Build
选择要构建的时间范围(如果数据是持续写入 hive 表,那么可以使用 cube 持续构建)
进入 Monitor 中查看正在构建的 Cube,和历史构建的 cube
(五)查询
cube 构建成功后,数据就已经计算过,并将计算结果存储到了 Hbase。那么这时候我们可以使用 SQL 在 kylin 中进行查询。
比较一下在 kylin 中查询和直接在 hive 中查询的速度。
执行一个 group by order by 的查询。
SQL:select ip, max(loadmax) as loadmax,max(connectmax) as connectmax, max(eth0max) as eth0max, max(eth1max) as eth1max ,max(rospace) as rospace,max(team) as team from resource group by ip order by loadmax asc;
在 Kylin 预计算之后,这条查询只用了 0.11s
直接在 hive 中进行计算时间是 30.05s
时间相差 270 倍!!!
(六)样例数据
#kylin 自带一个样例,包含 1w 条数据的样本
$ ./bin/sample.sh
Sample cube is created successfully in project ‘learn_kylin’.
Restart Kylin server or reload the metadata from web UI to see the change.
$ ./bin/kylin.sh stop
stopping Kylin:15334
$ ./bin/kylin.sh start
可以在 Kylin 中看到 learn_kylin 这个项目。并且有创建好的 model 和 cube,可以供参考和学习。
本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-03/142135.htm