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

文章主要针对kylingence或者kylin及hadoop的各个组件使用的问题汇总:

问题7

Hive 重启后,Kyligence Enterprise 报错 "/tmp/hive-scratch on HDFS should be writable"

问题8问题描述: 在 FushionInsight C70 中重新启动 Hive 后,Kyligence Enterprise 报告 "/tmp/hive-scratch on HDFS should be writable"。

根本原因: 重新启动 Hive 后,始终会撤消在 /tmp/hive-scrach 文件夹上设置的访问权限。 解决方法是将 hive.exec.scratchdir 设置为 Kyligence Enterprise 有足够权限访问的文件夹。但是此配置需要在 Kyligence Enterprise 服务器上设置,而不是在 FusionInsight Manager 上设置。

解决方案:

1.找到 hive-site.xml 文件,默认路径为 /opt/fi_client/Hive/config/hive-site.xml。
2.拷贝 hive-site.xml 文件放至 $KYLIN_HOME/conf/ 路径下。
3.编辑文件 $KYLIN_HOME/conf/hive-site.xml ,增加新参数 hive.exec.scratchdir 指向 Kyligence Enterprise 有足够权限访问的文件夹。

关键信息:

Caused by: java.lang.RuntimeException: The root scratch dir: /tmp/hive-scratch on HDFS should be writable. Current permissions are: rwx-------
 at org.apache.hadoop.hive.ql.session.SessionState.createRootHDFSDir(SessionState.java:612)
 at org.apache.hadoop.hive.ql.session.SessionState.createSessionDirs(SessionState.java:554

问题9

问题描述: 查询报错 "Something went wrong. The filter in SQL statement is too complex, please simplify this SQL statement.".

根本原因: Kyligence Enterprise 将识别过于复杂的查询并阻止其执行,从而减少堆栈溢出错误。当 SQL 的过滤条件中包含大量 In 条件时,查询抛出错误 "java.lang.StackOverflowError"。

解决方案:

注意: 此更改可能导致 Kyligence Enterprise 截获的有风险的查询数量变少。

在 kylin.properties 中增大 kylin.query.max-filter-complexity 的值,这个参数用于限制过滤条件的最大个数,默认值为 500。

在 $KYLIN_HOME/conf/setenv.sh 的 KYLIN_JVM_SETTINGS 中增加参数 -Xss4096k或至更大。

export KYLIN_JVM_SETTINGS="-XX:+UseG1GC -Xms24g -Xmx24g -Xss4096k

提示:我们推荐您同时增加 -Xms24g -Xmx24g 的值来适应这个参数的变化。

重启 Kyligence Enterprise 使得配置修改生效

关键信息:

Something went wrong. The filter in SQL statement is too complex, please simplify this SQL statement.

问题10

数据量较大的构建任务在 "Extract Fact Table Distinct Column" 运行较长时间

问题描述: 当在 “Extract Fact Table Distinct Column” 步骤中运行大量数据的构建任务时,Reduce 任务运行缓慢。虽然设置了较大的 Reduce 内存,但任务仍然卡滞。

根本原因: 在 Reduce 数据处理期间,需要将数据复制到本地服务器以减少操作。 在 Reducer 中,数据复制任务和数据合并任务是同时执行的。如果数据复制任务的内存使用量未达到阈值,则可能不会触发写入操作,并且数据合并任务将使用剩余的内存。

解决方案: 在 $KYLIN_HOME/conf/kylin_job_conf.xml 和 kyli_job_conf_inmem.xml 中修改或增加如下参数:

mapreduce.reduce.shuffle.merge.percent 从默认的 0.66 调整到 0.99,表示数据复制任务完成后才开始进行数据合并。 mapreduce.reduce.shuffle.memory.limit.percent 从默认的 0.25 调整到更小,这意味着单个shuffle可以更早地将数据写入磁盘,因为它可以消耗更少的内存。

关键信息:

2015-05-20 23:32:17,527 INFO [fetcher#29] org.apache.hadoop.mapreduce.task.reduce.Fetcher: fetcher#29 - MergeManager returned status WAITING
2015-05-20 23:32:17,545 INFO [fetcher#13] org.apache.hadoop.mapreduce.task.reduce.Fetcher: fetcher#13 - MergeManager returned status WAITING
2015-05-20 23:32:17,549 INFO [fetcher#29] org.apache.hadoop.mapreduce.task.reduce.Fetcher: fetcher#29 - MergeManager returned status WAITING

问题11

MapReduce 任务报错 "Could not deallocate container"

问题描述: MapReduce 任务报错 "Could not deallocate container",资源管理器抛出异常 "The required MAP capability is more than the supported max container capability in the cluster. Killing the Job"

根本原因: 运行 MapReduce 任务时,Kyligence Enterprise 请求的资源超过 YARN 可以分配给单个 Container 的资源。

解决方案:

在 yarn-site.xml 中增加 yarn.scheduler.maximum-allocation-mb 参数的值,重启 YARN。

在 $KYLIN_HOME/conf/kylin_job_conf.xml 和 $KYLIN_HOME/conf/kylin_job_conf_inmem.xml 中减少 mapreduce.map.memory.mb 和 mapreduce.reduce.memory.mb 的值直到小于 yarn.scheduler.maximum-allocation-mb 参数的值,重启 Kyligence Enterprise 使得配置修改生效。

注意: 减少 mapreduce.map.memory.mb 和 mapreduce.reduce.memory.mb 的值有可能导致 Kyligence Enterprise 提交的 MapReduce 任务因为内存不足报错。

关键信息:

The required MAP capability is more than the supported max container capability in the cluster. Killing

问题12

构建报错 "Error for build project"

问题描述:构建 Cube 在 "Build Project Dicitonary" 失败,报错信息为 "Error for build project"。

根本原因:由于一个已知问题,当执行垃圾清理命令 $KYLIN_HOME/bin/kylin.sh io.kyligence.kap.tool.storage.KapGarbageCleanupCLI --delete false 时,可能会误删项目的字典文件。

解决方案: 

停止并删除所有 Cube 构建任务;

执行如下命令:

$KYLIN_HOME/bin/kylin.sh io.kyligence.kap.tool.migration.ProjectDictionaryMigrationCLI FIX

重启 Kyligence Enterprise,重新构建该 Cube。

关键信息:

2018-10-29 18:31:49,753 ERROR [Scheduler 2119571223 Job d277d011-032e-4e9b-b343-bcb72cb7b087-368] execution.AbstractExecutable : Error for build project.
java.lang.NullPointerException   at org.apache.kylin.dict.project.ProjectDictionaryManager.append(ProjectDictionaryManager.java:437)   at org.apache.kylin.cube.CubeManager.updateSegmentProjectDictionary(CubeManager.java:1020)   at org.apache.kylin.cube.CubeManager.updateSegmentProjectDictionary(CubeManager.java:1046)
    at io.kyligence.kap.engine.mr.steps.BuildProjectDictionaryStep.doWork(SourceFile:59)
    at org.apache.kylin.job.execution.AbstractExecutable.execute(AbstractExecutable.java:132)

问题13

启用了 Spark 资源动态分配后,相同查询时长不同

问题描述:当用户启用了 Spark 资源动态分配后,相同查询时长不同

根本原因:如果 kap.storage.columnar.spark-conf.spark.dynamicAllocation.minExecutors 被设置为 0,有一定的几率,在一段时间内,没有可用的 Spark Executor 来执行查询,初始化 Spark Executor 需要花一定的时间。

解决方案:将 kap.storage.columnar.spark-conf.spark.dynamicAllocation.minExecutors 设置成一个更高的值,保证在任何时间段都至少有几个可用的 Spark Executor 来执行查询。

关键信息:

2018-07-05 02:13:27,188 INFO [spark-dynamic-executor-allocation] spark.ExecutorAllocationManager : Requesting 1 new executor because tasks are backlogged (new desired total will be 1)
2018-07-05 02:13:29,301 INFO [dispatcher-event-loop-7] cluster.YarnSchedulerBackend$YarnDriverEndpoint : Registered executor NettyRpcEndpointRef(null) (10.210.124.53:41440) with ID 54
2018-07-05 02:13:29,302 INFO [SparkListenerBus] spark.ExecutorAllocationManager : New executor 54 has re

问题14

构建在 YARN ApplicationMaster 上报错 "Java heap space"

问题描述: 构建在 "Build Base Cuboid" 这一步失败,报错信息为 "Java heap space".

根本原因: 分配给 YARN ApplicationMaster 的内存不足,导致 YARN ApplicationMaster 运行异常

解决方案:

修改 Cloudera Manager 默认配置

在 Cloudera Manager -> Yarn -> 搜索 ApplicationMaster Memory,请确认对应数值不要低于2GB

在 Cloudera Manager -> Yarn -> 搜索ApplicationMaster Java Opts Base,新增配置 -Xmx1800M,如 -Djava.net.preferIPv4Stack=true -Xmx1800M,-Xmx对应参数值大小为ApplicationMaster Memory 的 90%

在 Cube 级别进行配置,提高 YARN ApplicationMaster 配置

编辑 Cube (或禁用 Cube)进入高级配置,在 Job相关配置 下增加参数

yarn.app.mapreduce.am.resource.mb = 2048

yarn.app.mapreduce.am.command-opts = -Djava.net.preferIPv4Stack=true -Xmx1800M

在 $KYLIN_HOME/conf/kylin_job_conf.xml 中,调大参数 yarn.app.mapreduce.am.resource.mb 和 yarn.app.mapreduce.am.command-opts 的值。

关键信息:

2018-12-11 11:18:16:,914 FATAL [main] org.apache.hadoop.mapreduce.v2.app.MRAppMaster: Error starting MRAppMaster
java.lang.OutOfMemory: Java heap space
  at java.util.Arrays.copyOfRange(Arrays.java:3664)
  at java.lang.StringBuffer.toString(StringBuffer.java:669)
  at org.apache.xerces.dom.DeferredDocumentImpl.getNodeValueString(Unknown Source)
  at org.apache.xerces.dom.DeferredDocumentImpl.getNodeValueString(Unknown Source)
  at org.apache.xerces.dom.DeferredTextImpl.synchronizeData(Unknown Source)
2018-12-11 11:18:16:,917 INFO [main] org.apache.hadoop.util.ExitUtil: Exiting with status 1

问题15

使用 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
 18/05/25 16:46:05 INFO parser.CatalystSqlParser: Parsing command: bigint
 Exception in thread "Driver" java.lang.OutOfMemoryError: PermGen space
  at java.lang.ClassLoader.defineClass1(Native Method)
  at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
 ...

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