背景 : 近来公司要做报表,随简单研究一下Kylin。Kylin可谓是我泱泱中华在Apace史上耀眼的一笔。
作用: Kylin是强大的OLAP分析引擎,详见官网。
Kylin 1.6 CDH5.10
安装
Kylin有两种安装方式:单机及集群。本文以集群为例。单机版Kylin安装起来还是挺简单的,解压即安装。
配置
1.环境变量的配置:
export HADOOP_USER_NAME=hdfs
export KAFKA_HOME=/opt/cloudera/parcels/KAFKA-2.1.1-1.2.1.1.p0.18/lib/kafka
export HCAT_HOME=/opt/cloudera/parcels/CDH-5.10.0-1.cdh5.10.0.p0.41/lib/hive-hcatalog
export HIVE_HOME=/opt/cloudera/parcels/CDH-5.10.0-1.cdh5.10.0.p0.41/lib/hive
export KYLIN_HOME=/home/syphcdh/kylin/kylin-1.6.0-cdh5.7
export PATH=${PATH}:${KYLIN_HOME}/bin
2.Kylin.
修改:
Kylin server mode, valid value [all, query, job]
kyin.server.mode=all
kylin.rest.servers=xxxxxx:7070,xxxxxx:7070
仅支持一台机器为all
问题:
1.can`t not fount org.apache.hadoop.hive.serde2.typeinfo.TypeInfo
配置文件中加入:
kylin.job.mr.lib.dir=/opt/cloudera/parcels/CDH-5.10.0-1.cdh5.10.0.p0.41/lib/sentry/lib/
2.hive的一些包会报找不到
最简单的办法:将hive相关的包放入Kylin的lib目录下
3.Application with id ‘application_1495078923524_0022’ doesn’t exist in RM or Timeline Server.
NodeManger内存不足
4.Kylin leverages HBase coprocessor to optimize query performance. After new versions released, the RPC protocol may get changed, so user need to redeploy coprocessor to HTable.
There’s a CLI tool to update HBase Coprocessor:
KYLIN_HOME/bin/kylin.sh org.apache.kylin.storage.hbase.util.DeployCoprocessorCLI KYLIN_HOME/lib/kylin-coprocessor-*.jar all
5.2017-07-20 17:03:18,360 INFO org.apache.kylin.storage.hbase.cube.v2.coprocessor.endpoint.CubeVisitService: The cube visit did
not finish normally because scan num exceeds threshold
org.apache.kylin.gridtable.GTScanExceedThresholdException: Exceed scan threshold at 393073
at org.apache.kylin.storage.hbase.cube.v2.coprocessor.endpoint.CubeVisitService 1.hasNext(CubeVisitService.java:258)atorg.apache.kylin.storage.hbase.cube.v2.HBaseReadonlyStore 1$1.hasNext(HBaseReadonlyStore.java:111)
at org.apache.kylin.gridtable.GTAggregateScanner.iterator(GTAggregateScanner.java:139)
at org.apache.kylin.storage.hbase.cube.v2.coprocessor.endpoint.CubeVisitService.visitCube(CubeVisitService.java:290)
at org.apache.kylin.storage.hbase.cube.v2.coprocessor.endpoint.generated.CubeVisitProtos
原因3点:
说白了就是kylin关于hbase的3个参数:
kylin.query.scan.threshold
kylin.query.mem.budget
kylin.query.coprocessor.mem.gb
任何一个参数不达标都会报regionserver 都会报org.apache.kylin.gridtable.GTScanExceedThresholdException: Exceed scan threshold ,而前端查询kylin是timeout
6.当用kylin做报表时,kylin报错
2017-06-26 14:51:52,523 ERROR [IPC Server handler 3 on 33033] org.apache.Hadoop.mapred.TaskAttemptListenerImpl: Task: attempt_1498453243500_0032_m_000000_0 - exited : Java.lang.ArrayIndexOutOfBoundsException: -1 at org.apache.kylin.engine.mr.steps.FactDistinctHiveColumnsMapper.putRowKeyToHLL(FactDistinctHiveColumnsMapper.java:179)
at org.apache.kylin.engine.mr.steps.FactDistinctHiveColumnsMapper.map(FactDistinctHiveColumnsMapper.java:155)
经过查看kylin的issue得知
The problem is when you have same name column in Dim and Fact Table
SOL1: Rename columns in Hive or use Hive’s view
SOL2: Will be solved in Kylin 1971 (kylin2.0中已解决)
维度表跟维度表之间也不要有相同的字段
7.不同的cube维度不能相同
延伸
关于MPP和Cube预处理的差异,重复如下:
MPP 的基本思路是增加机器来并行计算,从而提高查询速度。比如扫描8亿记录一台机器要处理1小时,但如果用100台机器来并行处理,就只要一分钟不到。再配合列式存储和一些索引,查询可以更快返回。要注意这里在线运算量并没有减小,8亿条记录还是要扫描一次,只是参与的机器多了,所以快了。
MOLAP Cube 是一种预计算技术,基本思路是预先对数据作多维索引,查询时只扫描索引而不访问原始数据从而提速。8亿记录的一个3维索引可能只有几万条记录,规模大大缩小,所以在线计算量大大减小,查询可以很快。索引表也可以采用列存储,并行扫描等MPP常用的技术。但多维索引要对多维度的各种组合作预计算,离线建索引需要较大计算量和时间,最终索引也会占用较多磁盘空间。
最后的最后,你知道,小省是谁吗?偷偷的告诉你,小省喊我去玩啦~~~