kylin使用时候出现的问题及处理方式(一)

文章主要针对在使用kyligence或者kylin时候出现的一些问题总结:

问题1

使用 Spark 构建报错 "OutOfMemoryError of PermGen Space"

问题描述: 使用 Spark 构建报错 java.lang.OutOfMemoryError: PermGen space.

根本原因: PermSize 的资源不足(默认值为 256M)

解决方案: 在 kylin.properties 中添加参数 MaxPermSize 如下: kylin.engine.spark-conf.spark.driver.extraJavaOptions=-Dhdp.version=current -XX:MaxPermSize=512M

关键信息:

18/05/25 16:46:04 INFO execution.SparkSqlParser: Parsing command: ai_kappy_prd.kylin_intermediate_ue_lifecircle_model_clone_84aff9d1_452b_4d0b_9bf7_4e523d5ba802
 18/05/25 16:46:05 INFO parser.CatalystSqlParser: Parsing command: string
 Exception in thread "Driver" java.lang.OutOfMemoryError: PermGen space
  at java.lang.ClassLoader.defineClass1(Native Method)
  at java.lang.ClassLoader.defineClass(ClassLoader.java:800)

查询下压报错 "Expected only partition pruning predicates"

根本原因: 这是 Spark 的一个已知问题,当使用 SparkSQL v2.1 查询 Hive 表分区列时,列名大小写敏感。

解决方案: 使用准确的大小写来进行查询,比如有一个 Hive 分区列名为 'date',查询的时候必须用 'date' 而不能使用 'DATE'

问题2

重置元数据后,页面弹框报错 "Unknown Error"

问题描述: 重置元数据后,刷新 Kyligence Enterprise UI 会提示 “未知错误”。

根本原因: 执行 $KYLIN_HOME/bin/metastore.sh reset 来重置元数据,同时会将用户(包括 ADMIN 用户)信息一并删除。

解决方案: 重启 Kyligence Enterprise,如果系统发现元数据中没有 ADMIN 用户有关的信息,会自动创建一个。

关键信息:

{
    "code" : "999",
    "data" : null,
    "msg" : "Full authentication is required to access this resource",
    "stacktrace
  "exception" : "Full authentication is required to access this resource",
  "url" : "http://sandbox.hortonworks.com:7070/kylin/api/canary/local_report"
}

问题3

如何提高读取 Cube 数据的并行度

在构建 Cube 时,每个 Cube 将根据其估计的物理尺寸进行分片。 一个更大的 Cuboid ,它将获得更多的分片。

用户可以手动修改 kylin.properties 中的以下参数,以提高读取 Cube 数据的并行度。

如果 Cuboid 的分片数大大超过总 CPU 内核数量,则可以减小 kap.storage.columnar.shard-max 的值,该值指定每个 Cuboid 的最大分片数,默认值为 1000。

如果需要改进一些小 Cuboid 的并行度,可以增加 kap.storage.columnar.shard-min 的值,它指定每个 Cuboid 的最小分片数,默认值为 1

问题4

在 Hive 中使用 Parquet 或者 ORC 存储格式时,模型检测报错 "NoClassDefFoundError"

根本原因: 当 Kyligence Enterprise 从存储为 Parquet 或 ORC 存储格式的 Hive 表中读取数据时,需要 kryo-shaded 和 hive-exec 的 JAR文件。

解决方案:

创建一个目录来存储执行作业所需的所有 JAR 文件,如:mkdir $KYLIN_HOME/mrlibdir

将相关的 JAR 文件复制到创建的目录中。

如果报错信息是 "java.lang.NoClassDefFoundError: com/esotericsoftware/shaded/org/objenesis/strategy/InstantiatorStrategy", 在环境中找到 hive-exec-1.1.0-cdh{version}.jar 这个 JAR 文件并拷贝到 $KYLIN_HOME/mrlibdir 目录下。

如果报错信息是 "java.lang.NoClassDefFoundError: com/esotericsoftware/kryo/Serializer",下载 kryo-2.21-shaded.jar 并拷贝到 $KYLIN_HOME/mrlibdir 目录下。

在 kylin.properties 中增加配置项 kylin.engine.mr.lib-dir={用于存放 JAR 文件的目录},如:kylin.engine.mr.lib-dir=$KYLIN_HOME/mrlibdir,该参数对应值必须是绝对路径

重启 Kyligence Enterprise 使得配置生效并且重新提交模型检测任务。

关键信息:

java.lang.NoClassDefFoundError: com/esotericsoftware/kryo/Serializer    at org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat.getRecordReader(MapredParquetInputFormat.java:62)    at org.apache.hive.hcatalog.mapreduce.HCatRecordReader.createBaseRecordReader(HCatRecordReader.java:116) ...
 Caused by: java.lang.ClassNotFoundException: com.esotericsoftware.kryo.Serializer
     at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
     at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
  org.apache.kylin.job.exception.ExecuteException: java.lang.NoClassDefFoundError: com/esotericsoftware/shaded/org/objenesis/strategy/InstantiatorStrategy
     at org.apache.kylin.job.execution.AbstractExecutable.execute(AbstractExecutable.java:141)
     at org.apache.kylin.job.execution.DefaultChainedExecutable.doWork(DefaultChainedExecutable.java:67)     ...
Caused by: java.lang.NoClassDefFoundError: com/esotericsoftware/shaded/org/objenesis/strategy/InstantiatorStrategy
     at org.apache.hadoop.hive.ql.exec.Utilities.(Utilities.java:1088)
     at org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat.getRecordReader(MapredParquetInputFormat.java:62)
     ...
 Caused by: java.lang.ClassNotFoundException: com.esotericsoftware.shaded.org.objenesis.strategy.InstantiatorStrategy
     at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
     at java.net.URLClassLoader$1.run(URLClassLoader.java:355)

问题5

如何单独为 Build Base Cuboid 步骤设置 MapReduce 参数

如若一个Cube中包含超高基数的去重指标,那么在 Cube 构建的 Build Base Cuboid 步骤,需要配置相对大的 MapReduce 内存。但是其他构建步骤并不需要一样的配置资源。在 Kyligence Enterprise 3.2.2.2026 之后,为了避免其他步骤由于配置较高 MapReduce 内存导致的资源浪费,可以为 Build Base Cuboid 步骤单独配置 MapReduce 参数,从而提高 YARN 资源利用率。

配置方法:如下参数可以在 $KYLIN_HOME/conf/kylin.properties 中配置使之全局生效,同时您可以将如下参数在 Project 级别或者 Cube 级别配置使之生效

kylin.engine.mr.base-cuboid-config-override.mapreduce.map.memory.mb=8192
kylin.engine.mr.base-cuboid-config-override.mapreduce.map.java.opts=-Xmx7373m -XX:MaxDirectMemorySize=256M
kylin.engine.mr.base-cuboid-config-override.mapreduce.reduce.memory.mb=32768
kylin.engine.mr.base-cuboid-config-override.mapreduce.reduce.java.opts=-Xmx29491m -XX:MaxDirectMemorySize=1638M

注:上述参数具体配置大小请根据实际情况进行调整在 $KYLIN_HOME/conf/kylin.properties 中配置,需要重启 Kyligence Enterprise 使之生效,Project 级别或者 Cube 级别配置即可实时生效。

问题5

kyligence Enterprise 进程在没有任何明显报错信息的情况下被终止

问题描述:Kyligence Enterprise 进程被突然终止,kylin.log 日志中没有报任何明显的错误信息

根本原因:在 Linux 操作系统中的 /var/log/messages 中,Kyligence Enterprise 进程显示被 oom-killer 杀死,这表示 Kyligence Enterprise 进程占用了太多内存而被 Linux 操作系统的 OOM Killer 杀死

解决方案:在更强大的 Linux 机器上运行 Kyligence Enterprise,一般的推荐内存配置在 64GB 或更高

Nov 22 15:44:46 VL-Dev-11583 kernel: [1977206.788834] java invoked oom-killer: gfp_mask=0x201da, order=0, oom_adj=0, oom_score_adj=0
Nov 22 15:44:47 VL-Dev-11583 kernel: [1977206.788840] java cpuset=/ mems_allowed=0-7
Nov 22 15:44:47 VL-Dev-11583 kernel: [1977206.788843] Pid: 21587, comm: java Tainted: G

问题6

执行 CLI 命令时报错内存溢出

问题描述:执行垃圾清理、元数据检查等 CLI 命令时,可能会报错。

根本原因:当 $KYLIN_HOME/bin/ 目录下不存在 setenv-tool.sh 文件时,在执行垃圾清理,元数据检查等 CLI 命令时会默认读取 $KYLIN_HOME/conf/setenv.sh 中的 KYLIN_JVM_SETTINGS 配置,若机器剩余内存无法启用一个相同内存的 JVM ,CLI 命令会报错。

解决方案:在 $KYLIN_HOME/bin/ 目录下新建 setenv-tool.sh 文件并写入如下内容(其中大小可根据需要配置):

#!/bin/bash
export KYLIN_EXTRA_START_OPTS="-XX:+UseG1GC -Xms2g -Xmx2g"

关键信息:java.lang.OutOfMemoryError: Java heap space

你可能感兴趣的:(kylin的使用及学习)