報錯信息:
2017-06-26 14:17:30,167 INFO [pool-9-thread-3] cli.DictionaryGeneratorCLI:57 : Building snapshot of ENERGON_DM.DM_DIAGNOSIS_FACT_SGYY_ROOT_SET_FLAG 2017-06-26 14:17:31,484 ERROR [pool-9-thread-3] common.HadoopShellExecutable:65 : error execute HadoopShellExecutable{id=8188ef71-3bc6-4b9a-b87d-5559e3ea6b4a-03, name=Bu ild Dimension Dictionary, state=RUNNING} java.lang.ArrayIndexOutOfBoundsException: -1 at org.apache.kylin.dict.lookup.SnapshotTable.takeSnapshot(SnapshotTable.java:89) at org.apache.kylin.dict.lookup.SnapshotManager.buildSnapshot(SnapshotManager.java:132) at org.apache.kylin.cube.CubeManager.buildSnapshotTable(CubeManager.java:270) at org.apache.kylin.cube.cli.DictionaryGeneratorCLI.processSegment(DictionaryGeneratorCLI.java:58) at org.apache.kylin.cube.cli.DictionaryGeneratorCLI.processSegment(DictionaryGeneratorCLI.java:41) at org.apache.kylin.engine.mr.steps.CreateDictionaryJob.run(CreateDictionaryJob.java:54) 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:63) 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)
解決:
meta中/table/下存在同名但大小寫不同的兩個table的meta, 這個meta文件里column的id起始為0,正常情況應該為1. kylin內部把表的meta存到一個hashmap里,key為大寫的表名,不論原來是否為大寫。在這個情況中小寫的meta的內容把大寫的meta內容覆蓋了,查ID的時候有一個操作是把id值 - 1。如果原始的ID為0,-1之后就變成-1,然后就拋出上面的異常。
org.apache.kylin.dict.lookup.SnapshotTable:

org.apache.kylin.metadata.model.ColumnDesc:

問題meta:

ps: 類org.apache.kylin.metadata.model.ColumnDesc對應table中的一個column:
v.s.
