我们目前正在使用maven shade插件将flink应用程序部署为一个胖jar。问题是,每个应用程序jar最终大约有130-140mb,这对于每次构建和部署都是一个难题。有没有一种方法可以排除依赖项,只需在集群中部署一个大约50KB的瘦jar?
n9vozmp41#
下面是我们如何处理gradle的!我们有两个子项目: job :对于要运行的流作业 runtime :对于其他运行时依赖项(例如自定义 FileSystem (实施)我们为运行时提供的依赖项创建一个新的gradle配置:
job
runtime
FileSystem
configurations { provided, compile.extendsFrom provided }
然后将提供的依赖项标记为:
provided("org.apache.flink:flink-java:1.6.0") // flink java v1.6.0
然后,我们修改 jar 任务来构建一个没有任何 provided 依赖项:
jar
provided
jar { dependsOn configurations.runtime from { (configurations.runtime - configurations.provided).collect { it.isDirectory()? it : zipTree(it) } } { exclude 'META-INF/*.RSA' exclude 'META-INF/*.SF' exclude 'META-INF/*.DSA' } manifest { attributes 'Main-Class': 'com.example.Entrypoint' } }
结果是 jar 具有必需的依赖项( compile )捆绑,然后使用web ui进行部署。对于定制的运行时依赖项,我们构建了一个定制的docker映像并推送构建的工件( runtime.jar ,使用与上面相同的配置构建)到 libs/ Flink的目录。如果您不使用docker,也可以手动执行此操作。最后,在我们的特殊情况下,在我们的作业和运行时依赖(使用反射发现)之间没有定义直接依赖。
compile
runtime.jar
libs/
velaa5lx2#
您可以在flink的集群中预先放置依赖jar lib (请参阅避免动态类加载)并在每次提交作业时上载瘦jar。
lib
2条答案
按热度按时间n9vozmp41#
下面是我们如何处理gradle的!
我们有两个子项目:
job
:对于要运行的流作业runtime
:对于其他运行时依赖项(例如自定义FileSystem
(实施)我们为运行时提供的依赖项创建一个新的gradle配置:
然后将提供的依赖项标记为:
然后,我们修改
jar
任务来构建一个没有任何provided
依赖项:结果是
jar
具有必需的依赖项(compile
)捆绑,然后使用web ui进行部署。对于定制的运行时依赖项,我们构建了一个定制的docker映像并推送构建的工件(
runtime.jar
,使用与上面相同的配置构建)到libs/
Flink的目录。如果您不使用docker,也可以手动执行此操作。最后,在我们的特殊情况下,在我们的作业和运行时依赖(使用反射发现)之间没有定义直接依赖。
velaa5lx2#
您可以在flink的集群中预先放置依赖jar
lib
(请参阅避免动态类加载)并在每次提交作业时上载瘦jar。