THIS IS A TEST INSTANCE. ALL YOUR CHANGES WILL BE LOST!!!!

Apache Kylin : Analytical Data Warehouse for Big Data

Page tree

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

参考 issue:

Jira
serverASF JIRA
serverId5aa69414-a9e9-3523-82ec-879b028fb15b
keyKYLIN-5069

Table of Contents

一、背景

目前,kylin4.0 中仍然需要通过 hiveClient 去获取 hive meta 信息来 load hive table,通过用户反馈发现,load hive table,load hive table 时需要从 $HIVE_HOME/lib 下将 hive_dependency 加载到 kylin 环境中,通过用户反馈发现,由于用户使用的 hive 版本各异,hive_dependency 也会各不相同,在 load hive table 时经常会出现类冲突问题。

此外,由于 kylin 会加载 hadoop 类加载路径下的所有类到环境中,同样会导致一些不必要的 jar 包冲突问题。为了解决此类问题,我们计划从 classpath 的所有类到环境中,然后在 kylin 运行时再通过 SparkClassLoader 对 kylin 环境中的所有 dependency 做过滤加载,使用过滤完的 classpath 作为启动 sparder 的环境,这个过程可以简化为只加载需要的类到 kylin 环境中,去除 SparkClassLoader 的类加载过程。

为了解决此类问题,我们计划将加载 dependency 的过程统一通过 spark 管理

  1. kylin4.0 中去除 hive dependency,使用 SparkSession 来获取 hive meta

...

  1. 信息。
  2.  整理hadoop classpath,只加载 kylin4.0 真正需要的 hadoop 相关 jar 包到 kylin4.0

...

  1. 环境中,去除 SparkClassLoader。

二、开发计划

需要做的事情如下:

1. 从 kylin 启动脚本 kylin.sh 中去除加载 hive dependency 的过程;

2. 为避免 kylin 启动脚本 kylin.sh 中将 hadoop lib 目录下的所有 jar 包都加入 classpath,对 hadoop lib 下的 jar 包做整理和筛选,并将需要的 jar 包 copy 到 $SPARK_HOME/jars 目录下(仅当 $SPARK_HOME 路径为 $KYLIN_HOME/spark 时);

3. 在 kylin.sh 中对 kylin 要加载的 classpath 进行修改:之前的 classpath 包括 kylin server classpath、${KYLIN_HOME}/conf、${KYLIN_HOME}/lib/*、${KYLIN_HOME}/ext/*、hadoop classpath、hive classpath,修改之后的 class path 只包括 kylin server classpath、${KYLIN_HOME}/conf、${KYLIN_HOME}/lib/*、${KYLIN_HOME}/ext/*、${KYLIN_HOME}/hadoop_conf/*、${SPARK_HOME}/jars/*。之前的 hadoop classpath 和 hive classpath 由 ${SPARK_HOME}/jars/ 代替;

42. 继承 IHiveClient 接口实现 SparkHiveClient 类,使用 SparkSession 实现其中的方法;

35. 将 Kylin 4.0 中使用到原有 CLIHiveCLient/BeelineHiveClient 类的地方均替换为使用 SparkHiveClient 类;5. 清理相关无用代码。

6. 清理相关无用代码。

三、配置项变更

kylin.source.hive.client:原默认值为 cli,可配置为 cli 和 beeline;修改之后默认值为 spark_catalog。原来使用 cli 和 beeline 的用户均改变为使用 spark_catalog 来访问 hive meta。

四、测试

代码完成后,在 kylin4 支持的各个环境中进行兼容性测试,主要测试构建、查询和 load hive table。最终在以下环境通过测试:

...