微信搜索lxw1234bigdata | 邀请体验:数阅–数据管理、OLAP分析与可视化平台 | 赞助作者:赞助作者

分布式大数据多维分析(OLAP)引擎Apache Kylin安装配置及使用示例

Kylin lxw1234@qq.com 64213℃ 20评论

关键字:olap、Kylin

Apache Kylin是一个开源的分布式分析引擎,提供Hadoop之上的SQL查询接口及多维分析(OLAP)能力以支持超大规模数据,最初由eBay 开发并贡献至开源社区。它能在亚秒内查询巨大的Hive表。

kylin

Kylin OLAP引擎基础框架,包括元数据(Metadata)引擎,查询引擎,Job引擎及存储引擎等,同时包括REST服务器以响应客户端请求;

支持额外功能和特性的插件;

与调度系统,ETL,监控等生命周期管理系统的整合;

在Kylin核心之上扩展的第三方用户界面;

官网地址:http://kylin.apache.org/

提供了主要功能及使用的中文文档。

Kylin的架构特性


可扩展的超快OLAP引擎,提供标准SQL查询接口

支持单机或集群部署,为减少在Hadoop上百亿规模数据查询延迟而设计;

提供标准SQL接口,满足Hadoop之上的大部分分析查询需求。

交互式查询能力,多维立方体(MOLAP Cube)

用户能够在Kylin里为百亿以上数据集定义数据模型并构建立方体。

与BI工具及其他应用整合

提供JDBC及ODBC驱动,与BI工具整合。

其他特性

压缩与编码;

增量更新;

利用HBase Coprocessor;

基于HyperLogLog的Dinstinc Count近似算法;

友好的web界面以管理,监控和使用立方体;

项目及立方体级别的访问控制安全;

支持LDAP;

Kylin的安装部署


下载地址:http://kylin.apache.org/download/

apache-kylin-1.5.1-bin.tar.gz

解压至:/home/liuxiaowen/kylin

安装部署环境

我这里使用的相关版本为:

hbase-0.98.6-cdh5.2.0

hadoop-2.3.0-cdh5.0.0

apache-hive-2.0.0-bin

apache-kylin-1.5.1-bin

jdk1.7+

特别注意:Hive应该使用至少0.14以上的版本,我第一次使用0.13.1时候有问题。

另外,请确保Hadoop、HBase、Hive可用,这里不介绍。

配置环境变量

部署使用的用户为liuxiaowen

vi ~/.bash_profile

##HBASE
export HBASE_HOME=/opt/hbase-0.98.6-cdh5.2.0
export HBASE_CONF_DIR=/etc/hbase/conf

##HADOOP
export HADOOP_HOME=/opt/hadoop-2.3.0-cdh5.0.0
export HADOOP_CONF_DIR=/etc/hadoop/conf
export YARN_CONF_DIR=/etc/hadoop/conf

##HIVE
export HIVE_HOME=/home/liuxiaowen/apache-hive-2.0.0-bin
export HCAT_HOME=$HIVE_HOME/hcatalog
export HIVE_CONF=$HIVE_HOME/conf

##KYLIN
export KYLIN_HOME=/home/liuxiaowen/kylin/apache-kylin-1.5.1-bin

刷新环境变量:

source ~/.bash_profile


 

配置Kylin使用的Hive数据库:

cd $KYLIN_HOME/conf

vi kylin.properties

# Hive database name for putting the intermediate flat tables

## 这里配置在Hive中使用的schema,需要写权限

kylin.job.hive.database.for.intermediatetable=liuxiaowen


 

使用HDFS超级用户在HDFS上为Kylin创建工作目录,并赋权给liuxiaowen:

hadoop fs -mkdir /kylin

hadoop fs -chown -R liuxiaowen:liuxiaowen /kylin


## 可选,配置Kylin使用的内存

$KYLIN_HOME/bin/setenv.sh

检查环境配置

cd $KYLIN_HOME/bin

./check-env.sh

kylin

启动Kylin

cd $KYLIN_HOME/bin

./kylin.sh start

kylin

登陆Kylin WEB界面

浏览器输入:

http://172.16.212.17:7070/kylin

用户名密码:ADMIN/KYLIN

kylin

遇到的几个问题


都是因为使用了Hive0.13.1引起的:

Caused by: java.lang.IncompatibleClassChangeError:
   Found interface org.apache.hadoop.mapreduce.JobContext, but class was expected

hcatalog版本问题,后改为Hive2.0中的hcatalog

export HCAT_HOME=/home/liuxiaowen/apache-hive-2.0.0-bin/hcatalog

java.lang.NoClassDefFoundError: org/apache/hadoop/hive/shims/Utils

Kylin的简单示例


Kylin中多维分析Cube的建立主要包括以下步骤:

  1. Hive中分析好事实表;
  2. Kylin中建立项目(project);
  3. Kylin中建立数据源;
  4. Kylin中建立数据模型;
  5. Kylin中建立Cube;
  6. Build Cube;
  7. 查询Cube;

Kylin按照上面的过程,最终将Hive中的事实表按照相应的结构,压缩并存储在HBase中。

官网提供了中文文档,说明了如何在Kylin中建立Cube,非常详细:

http://kylin.apache.org/cn/docs15/tutorial/create_cube.html

Hive中的事实表

kylin

事实表lxw1234_kylin_fact中的维度有day、region、city、siteid、os;最终查询的指标有两个:PV以及UV(COUNT DISTINCT cookieid)

Kylin中建立数据模型

1. 建立项目lxw1234;

2. 将Hive中的事实表 lxw1234_kylin_fact导入到Kylin数据源:

kylin3. 建立数据模型lxw1234_dataModel:

选择维度数据:

kylin

选择指标数据:

kylin

其他设置:

kylin

数据模型中的日期分区字段貌似是必选的,否则会有问题。

然后保存。

kylin

Kylin中建立Cube

kylin

设计维度:

kylin

设计指标:

kylin

其中,UV使用的COUNT_DISTINCT是近似计算,需要选择错误率,错误率越低,占用的存储越大,Build耗时越长。

其他设置请参考上面给的中文文档链接,很详细。

设置好之后保存。

kylin

Kylin中Build Cube

在Cube后面的Actions下拉菜单中选择Build:

kylin

Submit之后,在Monitor页面中可以看到Build Job的进度和状态:

kylin

双击Job Name进入该Job的详细监控页:

kylin

Build完成后,在Model页面可以看到这个Cube已经是READY状态:

kylin

你可以在HBase中查看该Cube对应的HTable:

kylin

Kylin中使用SQL查询

在Insight页面中使用SQL查询:

kylin

注意:由于DAY是关键字,需要使用双引号。

至此,Kylin的安装配置及简单示例已经全部完毕,后续将介绍进一步的使用,比如和BI工具的整合等等,请关注我的博客。


您可以关注 lxw的大数据田地 ,或者 加入邮件列表 ,随时接收博客更新的通知邮件。

 

 

如果觉得本博客对您有帮助,请 赞助作者

转载请注明:lxw的大数据田地 » 分布式大数据多维分析(OLAP)引擎Apache Kylin安装配置及使用示例

喜欢 (84)
分享 (0)
发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(20)个小伙伴在吐槽
  1. 我用了官方的例子,但是通过页面查询事实表的时候没有数据,在HIVE上有数,博主知道原因吗?
    lordk2016-05-04 10:20 回复
    • 必须在Cube创建并build成功后,才可以在页面上查询事实表。
      lxw1234@qq.com2016-05-04 11:33 回复
      • 是build成功后查的,三张表两张lookup表都能查到数据
        lordk2016-05-04 12:30 回复
        • 原因是没开hadoop的historyserver
          lordk2016-05-04 13:11 回复
          • 我也遇到了这个情况,如果开启historyserver后,是不是需要重新刷新cube
            菠萝大数据2016-05-22 22:19
  2. 楼主,用了几台机器啊 我build失败了。。。 Caused by: org.apache.hadoop.hive.ql.metadata.HiveException: org.apache.hadoop.ipc.RemoteException(java.io.IOException): File /tmp/hive/root/cb39241b-b09b-4bff-8281-d59ad3d35725/hive_2016-05-13_17-34-04_504_6190005638016726600-1/_task_tmp.-ext-10002/_tmp.000007_3 could only be replicated to 0 nodes instead of minReplication (=1). There are 2 datanode(s) running and no node(s) are excluded in this operation.
    blue2016-05-13 17:46 回复
  3. 博主,你好,按照你的步骤,前几步都成功了,Cube也建成功了(cube Status也是READY了)。最后一步,用sql查询,返回查询status是Success,却没结果数据返回,请问博主知道是为何吗,谢谢了
    aaronyu2016-07-08 11:06 回复
    • 您好,我也遇到这种情况了,事实表返回查询是success,但没有返回数据,请问您解决了么?
      anny2017-05-04 10:52 回复
  4. 2016-07-08 15:47:40,118 INFO [localhost-startStop-1] hbase.HBaseConnection:139 : connection is null or closed, creating a new one 我按照博主的方法配置,启动的时候卡在这不动了,请问是什么原因?
    cashion2016-07-08 16:00 回复
  5. 你好
    freeman12312016-07-15 20:43 回复
  6. 您好,我在运行官方例子,sample.sh时,在build的第五步,报错如下: usage: CreateHTableJob -cubename Cube name. For exmaple, flat_item_cube -partitions Partition file path. -segmentname Cube segment name -statisticsenabled Statistics enabled java.lang.IllegalArgumentException: table KYLIN_D65MCNWXBW created, but is not available due to some reasons at com.google.common.base.Preconditions.checkArgument(Preconditions.java:92) at org.apache.kylin.storage.hbase.steps.CubeHTableUtil.createHTable(CubeHTableUtil.java:147) at org.apache.kylin.storage.hbase.steps.CreateHTableJob.run(CreateHTableJob.java:104) at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70) at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:84) at org.apache.kylin.engine.mr.common.HadoopShellExecutable.doWork(HadoopShellExecutable.java:60) at org.apache.kylin.job.execution.AbstractExecutable.execute(AbstractExecutable.java:114) at org.apache.kylin.job.execution.DefaultChainedExecutable.doWork(DefaultChainedExecutable.java:50) at org.apache.kylin.job.execution.AbstractExecutable.execute(AbstractExecutable.java:114) at org.apache.kylin.job.impl.threadpool.DefaultScheduler$JobRunner.run(DefaultScheduler.java:124) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:745) 请问,您遇到过么?期待您的回复。 祝好 2016年7月15日
    freeman12312016-07-15 20:47 回复
    • 你好,你的问题解决了吗?我在阿里云上部署也遇到了这个问题,如果解决了请告知一下,不甚感激
      哈哈2018-02-04 11:47 回复
  7. 启动kylin报错Caused by: java.lang.IllegalArgumentException: Failed to find metadata store by url: kylin_metadata@hbase at org.apache.kylin.common.persistence.ResourceStore.createResourceStore(ResourceStore.java:93) at org.apache.kylin.common.persistence.ResourceStore.getStore(ResourceStore.java:104) at org.apache.kylin.cube.CubeManager.getStore(CubeManager.java:874) at org.apache.kylin.cube.CubeManager.loadAllCubeInstance(CubeManager.java:808) at org.apache.kylin.cube.CubeManager.(CubeManager.java:127) at org.apache.kylin.cube.CubeManager.getInstance(CubeManager.java:96) at org.apache.kylin.rest.service.CacheService.initCubeChangeListener(CacheService.java:79) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:346) at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:299) at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:132) ... 53 more 但是 直接执行hbase shell 是能够连上hbase的
    天道2016-08-10 18:45 回复
  8. 你好,请教一下,我在安装完kylin之后,使用自带的sample.sh,在build的第三步报错,报错信息如下: java.lang.NoClassDefFoundError: org/apache/hive/hcatalog/mapreduce/HCatInputFormat at org.apache.kylin.source.hive.HiveMRInput$HiveTableInputFormat.configureJob(HiveMRInput.java:105) at org.apache.kylin.engine.mr.steps.FactDistinctColumnsJob.setupMapper(FactDistinctColumnsJob.java:119) at org.apache.kylin.engine.mr.steps.FactDistinctColumnsJob.run(FactDistinctColumnsJob.java:103) at org.apache.kylin.engine.mr.MRUtil.runMRJob(MRUtil.java:92) at org.apache.kylin.engine.mr.common.MapReduceExecutable.doWork(MapReduceExecutable.java:120) at org.apache.kylin.job.execution.AbstractExecutable.execute(AbstractExecutable.java:113) at org.apache.kylin.job.execution.DefaultChainedExecutable.doWork(DefaultChainedExecutable.java:57) at org.apache.kylin.job.execution.AbstractExecutable.execute(AbstractExecutable.java:113) at org.apache.kylin.job.impl.threadpool.DefaultScheduler$JobRunner.run(DefaultScheduler.java:136) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:745) Caused by: java.lang.ClassNotFoundException: org.apache.hive.hcatalog.mapreduce.HCatInputFormat at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1858) at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1701) ... 12 more 请问一下这个是什么原因?
    过河卒子Rover2017-01-17 18:30 回复
    • export HIVE_HOME=/opt/hive/current export KYLIN_HOME=/opt/kylin/current export HCAT_HOME=$HIVE_HOME/hcatalog 应该是HCAT_HOME环境变量没配置。
      lxw1234@qq.com2017-01-18 08:08 回复
      • 我在/etc/profile里已经配置了HACT_HOME,如下: #HIVE_HOME export HIVE_HOME=/home/spark/hive/apache-hive-1.2.1-bin export PATH=$PATH:$HIVE_HOME/bin #SQOOP_HOME export SQOOP_HOME=/home/spark/sqoop/sqoop-1.4.6 export PATH=$PATH:$SQOOP_HOME/bin #ZOOKEEPER_HOME export ZOOKEEPER_HOME=/home/spark/zookeeper/zookeeper-3.4.6 export PATH=$PATH:$ZOOKEEPER_HOME/bin #HBASE_HOME export HBASE_HOME=/home/spark/hbase/hbase-1.2.2 export PATH=$PATH:$HBASE_HOME/bin #KYLIN_HOME export KYLIN_HOME=/home/spark/kylin/apache-kylin-1.6.0-hbase1.x-bin export PATH=$PATH:$KYLIN_HOME/bin #HCAT_HOME export HCAT_HOME=$HIVE_HOME/hcatalog
        过河卒子Rover2017-01-18 10:13 回复
        • 你好,我遇到了和你一样的情况,请问你的这个问题解决了没?
          wfxxh2017-02-27 16:17 回复
  9. 你好,我在执行cube的这步:Extract Fact Table Distinct Columns时候,发生错误: java.lang.NoClassDefFoundError: org/apache/hadoop/hive/serde2/typeinfo/TypeInfo at org.apache.kylin.source.hive.HiveMRInput$HiveTableInputFormat.configureJob(HiveMRInput.java:105) at org.apache.kylin.engine.mr.steps.FactDistinctColumnsJob.setupMapper(FactDistinctColumnsJob.java:119) at org.apache.kylin.engine.mr.steps.FactDistinctColumnsJob.run(FactDistinctColumnsJob.java:103) at org.apache.kylin.engine.mr.MRUtil.runMRJob(MRUtil.java:92) at org.apache.kylin.engine.mr.common.MapReduceExecutable.doWork(MapReduceExecutable.java:120) at org.apache.kylin.job.execution.AbstractExecutable.execute(AbstractExecutable.java:113) at org.apache.kylin.job.execution.DefaultChainedExecutable.doWork(DefaultChainedExecutable.java:57) at org.apache.kylin.job.execution.AbstractExecutable.execute(AbstractExecutable.java:113) at org.apache.kylin.job.impl.threadpool.DefaultScheduler$JobRunner.run(DefaultScheduler.java:136) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745) Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.hive.serde2.typeinfo.TypeInfo at java.net.URLClassLoader.findClass(URLClassLoader.java:381) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ... 12 more 请问知道是什么原因和怎么解决吗?
    咖啡blue2017-04-12 14:42 回复
    • 话说你这个问题解决了没。。
      shanzi2017-06-13 11:46 回复
  10. 博主您好,我在build cube时出现了Could not find any valid local directory for nmPrivate/container_...的报错,经查看nmPrivate文件夹所有者是yarn,组是hadoop,权限700,不知道问题出在哪,该怎么解决呢?
    小胖子2019-12-02 00:48 回复