Apache DolphinScheduler 中 ZooKeeper CDH 不兼容问题的解决方案

看到ApacheDolphinScheduler社区群有很多用户反馈和讨论这块问题,针对不兼容的问题,不仅需要自己重新编译各一个新包,而且因为默认是使用zk-3.8的配置,所以会出现不兼容问题


背景

看到Apache DolphinScheduler社区群有很多用户反馈和讨论这块问题,针对不兼容的问题,不仅需要自己重新编译各一个新包,而且因为默认是使用zk-3.8的配置,所以会出现不兼容问题。使用zk-3.4配置即可适配3.4.x

解决办法(一)

#切换到项目源码的根路径中执行

mvn clean package -T 1C -Prelease '-Dmaven.test.skip=true' '-Dcheckstyle.skip=true' '-Dmaven.javadoc.skip=true' '-Dzk-3.4'

上述命令解释

mvn clean package  依次执行了clean、resources、compile、testResources、testCompile、test、jar(打包)等7个阶段。

指定多线程编译,可以增加~

拓展

-Dmaven.compile.fork=true 表示开启多线程mvn -T 4 install -- will use 4 threadsmvn -T 1C install -- will use 1 thread per available CPU coremvn clean package -T 1C -Dmaven.compile.fork=true-Prelease 是 Maven Release Plugin 的配置

Maven中-DskipTests和-Dmaven.test.skip=true的区别

在使用mvn package进行编译、打包时,Maven会执行src/test/java中的JUnit测试用例,有时为了编译过程中跳过测试步骤,会使用参数-DskipTests和-Dmaven.test.skip=true,这两个参数的主要区别是:

-DskipTests,不执行测试用例,但编译测试用例类生成相应的class文件至target/test-classes下。-Dmaven.test.skip=true,不执行测试用例,也不编译测试用例类。-D参数如果参数不存在于 pom.xml 文件中,它将被设置。如果参数已经存在 pom.xml 文件中,其值将被作为参数传递的值覆盖。

解决办法(二)

修改源码中的pom.xml配置文件

1、从github下载源码

直接访问https://github.com/,登陆之后搜索Apache DolphinScheduler!

1708231573469b0dff4733467092373676b300dd885f3

在百度直接搜:

1708231573460f9c716d64de45ce3eb44c4f8dac30012


17082315735162a694ad81fd5a73899bca1e8d316fca3

170823157352290875ec125d1f0d09c5a51cc16d1ef89

1708231573514d43e6fac8252a20709de0037bb162786


官网网址: https://github.com/apache/dolphinscheduler


选择 release版本


17082315735204bae66c18f7357292eaaacfb07caca3f

17082315743746b456eb1a79c24efce9f760d4385273f

2、将下载好的zip包解压出来,并导入IDEA工具中

170823157444839274145984a8fe42338327f5953ae86



1708231574481ea03038987e83cc8804a0957b17a4832

3、修改maven和jdk配置

1708231574435f4aa424f0f36e7893600ed933bbb7cf8


1708231574608ce06b90f62835849187e841712af3e7b

4、MVN命令操作

根目录执行

mvn clean package -T 1C -Prelease '-Dmaven.test.skip=true' '-Dcheckstyle.skip=true' '-Dmaven.javadoc.skip=true' '-Dzk-3.4'

报错如下

Failed to execute goal com.diffplug.spotless:spotless-maven-plugin:2.27.2:check (default) on project dolphinscheduler: The following files had format violations:

170823157460180e81598d49709d9f43be07be8e24c4c

这个是问题没有因为没有格式化代码,所以在校验的时候不通过

根据上面的提示只需要执行下命令:mvn spotless:apply就可以了

1708231575273847e983ba3607931eec805305f3539a2

随后会刷屏,过一会就会出现如下图,完事了

1708231575311eb18fcf42159cca2ea5e387fbf7a3488

再次根目录执行

mvn clean package -T 1C -Prelease '-Dmaven.test.skip=true' '-Dcheckstyle.skip=true' '-Dmaven.javadoc.skip=true' '-Dzk-3.4'

报错如下

1708231575326072f21ccc087933cd447eeefb254efd0

从提示中可以看出来,com.github.eirslett:frontend-maven-plugin这个插件有问题

首先看看本地的maven仓库中,有没有把这个插件通过依赖下载出来

1708231575345b11594f89f311286da7fea0049aebe52

d:IdeaProjectsdolphinscheduler-3.2.0-releasedolphinscheduler-uipom.xml文件中

把<goals>标签全都删除掉,防止构建时用npm的方式下载插件。

1708231575487f7b2e68227e10ecad11074d30c724ea8

再次根目录执行

mvn clean package -T 1C -Prelease '-Dmaven.test.skip=true' '-Dcheckstyle.skip=true' '-Dmaven.javadoc.skip=true' '-Dzk-3.4'

1708231575530c612612df87c468b99889e2a5cb540b8

可以看到,已经编译成功了。找到打好包生成的目标文件,位置是:项目源码目录dolphinscheduler-disttarget

我的位置是 D:IdeaProjectsdolphinscheduler-3.2.0-releasedolphinscheduler-disttarget

1708231576135349baef81ad924fa61a58645d7cf0cff

5、修改源码中的依赖配置

我不知道配置文件的指定的位置,在IDEA开发工具中按ctrl+shift+f组合键, 在项目所有文件中搜索:zookeeper.version

1708231576208cee49639adc38d45e5ca88322649cf15

d:\IdeaProjects\dolphinscheduler-3.2.0-release\dolphinscheduler-bom\pom.xml文件中找到

1708231576245313dfa3cf2d95da8b5814838e8093d39

修改一下源码,修改后如下图所示

17082315762541b32069db86c81db996c5302bc556209

根目录执行

mvn clean package -T 1C -Prelease '-Dmaven.test.skip=true' '-Dcheckstyle.skip=true' '-Dmaven.javadoc.skip=true'

17082315763443ce080d11e168587a65be020e2711919

可以看到,已经编译成功了。希望本文能帮助更多用户解决问题,如果您对这个话题感兴趣,欢迎来社区交流!

本文由 白鲸开源科技 提供发布支持!