环境:
hbase 单独集群版本:1.0.0-cdh5.5.1 , 对应的hadoop版本:2.6.0-cdh5.5.1
hadoop 版本: 2.6.0-cdh5.9.0
hive 版本:1.1.0-cdh5.9.0
hcatlog 版本: 1.1.0+cdh5.9.0
kylin 版本: apache-kylin-2.0.0-bin-cdh57.tar.gz
1. 启动不了
在kylin.out中看到 hadoop.tmp.dir 这个目录没有权限,导致启动不了, 原因是我之前用的root 用户启动一次kylin,后来切换用户导致的,赋权限就好。
2. hbase单独集群配置(最严重的一个问题)
kylin中 kylin.storage.hbase.cluster-fs 这个配置未配置,虽然可以运行kylin,但是是个天坑,将公司80台hbase单独服务集群弄挂了,这里的原因没有细究,需要去问问kylin的大神。(推测可能是hbase客户端配置直接用zk的配置的,在请求的时候一台一台hbase机器地址获取写入数据,因为数据量比较大导致单台机器承受不住,最终一台一台机器弄挂)
配置上面的参数,就必须要配置hbase的 kylin.storage.hbase.cluster-hdfs-config-file这个属性,指定hbase集群中hdfs的配置文件。
3. hbase 版本问题
由于官网提供的编译完成的二进制对应的版本有限,遇到的问题:
https://www.oschina.net/question/144320_2263656
最终解决方法,请自行去官网下载2.0版本源码,根据自己的hbase版本编译打包。
这个问题一般在查询阶段才会遇到。
4. cube第一步报错,内容如下:
java.lang.NullPointerException
at org.apache.kylin.source.hive.CreateFlatHiveTableStep.getCubeSpecificConfig(CreateFlatHiveTableStep.java:100)
at org.apache.kylin.source.hive.CreateFlatHiveTableStep.doWork(CreateFlatHiveTableStep.java:105)
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)
网上说是 metadata 数据加载失败, 可以去在系统中reload metadata下就好。
但中间遇到过好几次这样的问题,有时可以解决,有时候很顽皮, 具体原因不清楚。
使用中发现,cube对应的model中的事实表,也即从hive 数据源中导入到kylin中的需要计算的表在完成Sync操作后,会发出一个job任务(做什么暂时不清楚,猜测是抽取表对应的文件),当这个任务执行不成功时第一步也会遇到这个问题。请确保该任务执行成功。
5. 执行计算的时候发生MR倾斜
第一是字段维度设计有问题,请自行检查
第二就是重新手动按自己的方式对kylin计算的hive中间表做数据切分,关闭自动文件合并的功能。
set mapreduce.job.reduces=500;
set hive.merge.mapredfiles=false;
INSERT OVERWRITE TABLE kylin_intermediate_track_view_cube_1ae062d7_1490_4ece_a1b8_2c3358f5fdd9 SELECT * FROM kylin_intermediate_track_view_cube_1ae062d7_1490_4ece_a1b8_2c3358f5fdd9 DISTRIBUTE BY RAND();
设置reduce的计算个数,及重新切分表中的文件!上面的参数在cube执行中会打印出来, 后续自行copy按照表的数据量和集群资源,自行切分并安排合理的reduce的个数。
6. 权限问题
如果你是单独hbase集群请保证运行的用户,在两边hdfs上对应目录的权限相同,且可自行赋权,我这边遇到的问题是,hbase集群hdfs上的目录是/user/kylin目录,kylin用户对当前目录是可以操作的,但当赋权操作时失败,问题是/user目录是root用户且是700权限,导致下面/user/kylin目录下面的文件当前用户不能自己赋权, 修改/user目录的权限为755 解决当前用户不能自行赋权的问题。
使用总结:
1. 不支持原始数据明细查询
2. 单维度数据21亿限制
3. 查询限制于cube的设计,不是太灵活。
4. 查询分组等计算的速度很快,大部分在1秒内。
5. 分区时间字段格式支持有限。
6. cube计算维度的膨胀,需要对业务精确分析,对维度组合进行剪枝。
7. 跨segment的查询会比较慢。
参考: