前言node
Apache Kylin是一个开源的分布式分析引擎,最初由eBay开发贡献至开源社区。它提供Hadoop之上的SQL查询接口及多维分析(OLAP)能力以支持大规模数据,可以处理TB乃至PB级别的分析任务,可以在亚秒级查询巨大的Hive表,并支持高并发。web
Kylin的理论基础:空间换时间。apache
Kylin从数据仓库中最经常使用的Hive中读取源数据,使用 MapReduce做为Cube构建的引擎,并把预计算结果保存在HBase中,对外暴露Rest API/JDBC/ODBC的查询接口。vim
部署Kylinbash
(一)下载安装并发
写这篇博客时,最新版为2.0.0 beta版,最新的正式版为1.6.0,因此我使用的1.6.0。分布式
能够直接下载源码包编译安装,也能够根据本身的hadoop环境版本下载对应的二进制安装包。ide
我使用的是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,能够供参考和学习。