Apache Kylin : Analytical Data Warehouse for Big Data
Welcome to Kylin Wiki.
参考 issue:
一、背景
目前,kylin4.0 中仍然需要通过 hiveClient 去获取 hive meta 信息来 load hive table,load hive table 时需要从 $HIVE_HOME/lib 下将 hive_dependency 加载到 kylin 环境中,通过用户反馈发现,由于用户使用的 hive 版本各异,hive_dependency 也会各不相同,在 load hive table 时经常会出现类冲突问题。
此外,由于 kylin 会加载 hadoop 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/ 代替;
4. 继承 IHiveClient 接口实现 SparkHiveClient 类,使用 SparkSession 实现其中的方法;
5. 将 Kylin 4.0 中使用到原有 CLIHiveCLient/BeelineHiveClient 类的地方均替换为使用 SparkHiveClient 类;
6. 清理相关无用代码。
三、配置项变更
kylin.source.hive.client:原默认值为 cli,可配置为 cli 和 beeline;修改之后默认值为 spark_catalog。原来使用 cli 和 beeline 的用户均改变为使用 spark_catalog 来访问 hive meta。
四、测试
代码完成后,在 kylin4 支持的各个环境中进行兼容性测试,主要测试构建、查询和 load hive table。最终在以下环境通过测试:
Hadoop Distribution | Spark | Hadoop | Hive | Cluster Manager | Distributed Filesystem | Verified ? | Comment |
---|---|---|---|---|---|---|---|
CDH 5.7 | 2.4.7/3.1.1 | 2.6.0-cdh5.7.6 | 1.1.0-cdh5.7.6 | YARN | HDFS |
| 无需额外步骤 |
HDP 2.4 | 2.4.7 | 2.7.1.2.4.0.0-16 | 1.2.1000.2.4.0.0-16 | YARN | HDFS |
| 无需额外步骤 |
AWS EMR 5.33.0 | 2.4.7/3.1.1 | 2.10.1-amzn-1 | Hive 2.3.7-amzn-4 | YARN | HDFS/S3 |
| 无需额外步骤 |
CDH 6.2.0 | 2.4.7/3.1.1 | 3.0.0-cdh6.2.0 | 2.1.1-cdh6.2.0 | YARN | HDFS |
| 需要准备jar包放在指定目录:Deploy Kylin 4 on CDH 6 |
AWS EMR 6.3.0 | 3.1.1 | 3.2.1-amzn-3 | 3.1.2-amzn-4 | YARN | HDFS/S3 |
| 无需额外步骤 |
Apache | 3.1.1 | 3.2.0 | 2.3.9 | YARN, Standalone | S3 |
| http://kylin.apache.org/docs40/install/deploy_without_hadoop.html |