如何使用薄jar而不是胖jar?

vom3gejh  于 2021-06-21  发布在  Flink
关注(0)|答案(2)|浏览(379)

我们目前正在使用maven shade插件将flink应用程序部署为一个胖jar。问题是,每个应用程序jar最终大约有130-140mb,这对于每次构建和部署都是一个难题。有没有一种方法可以排除依赖项,只需在集群中部署一个大约50KB的瘦jar?

n9vozmp4

n9vozmp41#

下面是我们如何处理gradle的!
我们有两个子项目: job :对于要运行的流作业 runtime :对于其他运行时依赖项(例如自定义 FileSystem (实施)
我们为运行时提供的依赖项创建一个新的gradle配置:

configurations {
  provided,
  compile.extendsFrom provided
}

然后将提供的依赖项标记为:

provided("org.apache.flink:flink-java:1.6.0")  // flink java v1.6.0

然后,我们修改 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,也可以手动执行此操作。
最后,在我们的特殊情况下,在我们的作业和运行时依赖(使用反射发现)之间没有定义直接依赖。

velaa5lx

velaa5lx2#

您可以在flink的集群中预先放置依赖jar lib (请参阅避免动态类加载)并在每次提交作业时上载瘦jar。

相关问题