背景 : 近來公司要做報表,隨簡單研究一下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.CubeVisitService1.hasNext(CubeVisitService.java:258)atorg.apache.kylin.storage.hbase.cube.v2.HBaseReadonlyStore1.hasNext(CubeVisitService.java:258) at org.apache.kylin.storage.hbase.cube.v2.HBaseReadonlyStore1$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常用的技術。但多維索引要對多維度的各種組合作預計算,離線建索引需要較大計算量和時間,最終索引也會佔用較多磁盤空間。
最後的最後,你知道,小省是誰嗎?偷偷的告訴你,小省喊我去玩啦~~~