Java 如何用薄罐子代替胖罐子?
我们目前正在使用maven shade插件将Flink应用程序部署为一个胖罐子。问题是,每个应用程序jar最终大约有130-140 MB,这对于每次构建和部署都是一个难题。有没有一种方法可以排除依赖项,只需在集群中部署一个大约50KB的精简jar 您可以在Flink的Java 如何用薄罐子代替胖罐子?,java,apache-flink,uberjar,Java,Apache Flink,Uberjar,我们目前正在使用maven shade插件将Flink应用程序部署为一个胖罐子。问题是,每个应用程序jar最终大约有130-140 MB,这对于每次构建和部署都是一个难题。有没有一种方法可以排除依赖项,只需在集群中部署一个大约50KB的精简jar 您可以在Flink的lib(请参阅)中预先将依赖项JAR放置在集群中,然后在每次提交作业时只上载精简JAR。您可以在Flink的lib(请参阅)中预先将依赖项JAR放置在集群中,然后在每次提交作业时只上载精简JAR。下面是我们如何处理Gradle的 我
lib
(请参阅)中预先将依赖项JAR放置在集群中,然后在每次提交作业时只上载精简JAR。您可以在Flink的lib
(请参阅)中预先将依赖项JAR放置在集群中,然后在每次提交作业时只上载精简JAR。下面是我们如何处理Gradle的
我们有两个子项目:
:对于要运行的流作业作业
:用于其他运行时依赖项(例如自定义运行时
实现)文件系统
configurations {
provided,
compile.extendsFrom provided
}
然后将提供的依赖项标记为:
provided("org.apache.flink:flink-java:1.6.0") // flink java v1.6.0
然后,我们修改jar
任务来构建一个没有任何提供的依赖项的jar:
结果是一个带有所需依赖项(compile
)的jar
,然后使用Web UI进行部署
对于自定义运行时依赖项,我们构建一个自定义Docker映像,并将构建的工件(runtime.jar
,使用与上面相同的配置构建)推送到Flink中的libs/
目录。如果您不使用Docker,也可以手动执行此操作
最后,在我们的特殊情况下,在我们的作业和运行时依赖项(使用反射发现)之间没有定义直接的依赖项。下面是我们如何使用Gradle
我们有两个子项目:
作业
:对于要运行的流作业
运行时
:用于其他运行时依赖项(例如自定义文件系统
实现)
我们为运行时提供的依赖项创建新的gradle配置:
configurations {
provided,
compile.extendsFrom provided
}
然后将提供的依赖项标记为:
provided("org.apache.flink:flink-java:1.6.0") // flink java v1.6.0
然后,我们修改jar
任务来构建一个没有任何提供的依赖项的jar:
结果是一个带有所需依赖项(compile
)的jar
,然后使用Web UI进行部署
对于自定义运行时依赖项,我们构建一个自定义Docker映像,并将构建的工件(runtime.jar
,使用与上面相同的配置构建)推送到Flink中的libs/
目录。如果您不使用Docker,也可以手动执行此操作
最后,在我们的特殊情况下,在我们的作业和运行时依赖项(使用反射发现)之间没有定义任何直接依赖项。是的,只是没有任何依赖项(flink core依赖项除外),那么您的胖罐就会变小。如果您有必需的依赖项,则需要包含它们。否则它们将如何在flink容器中结束?是的,只是没有任何依赖项(flink核心依赖项除外),那么您的胖罐就会更小。如果您有必需的依赖项,则需要包含它们。否则它们将如何在flink容器中结束?我可以从fat jar文件中删除所有类,然后将其放入lib目录,然后使用瘦jar文件启动flink吗?我可以从fat jar文件中删除所有类,然后将其放入lib目录,然后使用瘦jar文件启动flink吗?