Apache Kylin : Analytical Data Warehouse for Big Data
Page History
参考 issue:
Jira
server ASF JIRA serverId 5aa69414-a9e9-3523-82ec-879b028fb15b key KYLIN-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 管理:
- 从 kylin4.0 中去除 hive dependency,使用 SparkSession 来获取 hive meta
...
- 信息。
- 整理hadoop classpath,只加载 kylin4.0 真正需要的 hadoop 相关 jar 包到 kylin4.0
...
- 环境中,去除 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。最终在以下环境通过测试:
...