如何在 Flink 中引用外部 Jar
How to Reference the External Jar in Flink
各位。我试图通过将其复制到所有任务管理器中的 $FLINK/lib 的方式在 Flink 中引用我公司的 jar,但失败了。而且不想打包个肥罐子,太重浪费时间。我认为第一种方法也不是一个好主意,因为我必须在整个集群中管理 jars。任何人都知道如何解决这个问题?如有任何建议,我们将不胜感激。
一般来说,建立一个胖罐子是最好的方法。不确定你的 far jar 有多大,你认为它是 "too heavy"?
将 jar 复制到 $FLINK/lib
应该可以。但是,您需要重新启动 Flink,以便将 jars 添加到 Flink 的类路径中。因此,这种方法不允许动态添加 jar——但是它应该适用于一堆稳定的 jar。
为了管理整个集群中的 jar,使用 NFS 文件夹作为 $FLINK/lib
可能有助于保持所有 TaskManager 同步。或者你简单地写一个 bash 脚本来分发你的罐子。
Flink 的命令行界面 (CLI) 允许使用 -C 选项传递额外的 jar 位置路径。我们用它来将依赖项传递给每个作业。
我们的问题:考虑到通常我们的作业在整个项目生命周期中都会发生变化,并且它们的外部依赖项会改变它们的版本,并且我们 运行 同一集群中的多个进程,我们希望 select每个 运行 中要加载的确切 jar 版本。因此,$FLINK/lib 目录对我们来说不够用。
详情:我们所做的是将 jar 分发到每个节点上的固定目录(不同于 $FLINK/lib)。稍后我们使用 CLI 启动作业(不是直接启动,因为调用很长,而是使用 bash 脚本来简化调用)。
如果您想避免依赖冲突,请不要将您的 jar 复制到 ${FLINK}/lib。如果你使用 yarn-cluster 作为你的 master,你可以使用 -yt(--yarn-ship)
,它会将 jar 复制到 hdfs 上,作为你的分布式程序类路径。
各位。我试图通过将其复制到所有任务管理器中的 $FLINK/lib 的方式在 Flink 中引用我公司的 jar,但失败了。而且不想打包个肥罐子,太重浪费时间。我认为第一种方法也不是一个好主意,因为我必须在整个集群中管理 jars。任何人都知道如何解决这个问题?如有任何建议,我们将不胜感激。
一般来说,建立一个胖罐子是最好的方法。不确定你的 far jar 有多大,你认为它是 "too heavy"?
将 jar 复制到 $FLINK/lib
应该可以。但是,您需要重新启动 Flink,以便将 jars 添加到 Flink 的类路径中。因此,这种方法不允许动态添加 jar——但是它应该适用于一堆稳定的 jar。
为了管理整个集群中的 jar,使用 NFS 文件夹作为 $FLINK/lib
可能有助于保持所有 TaskManager 同步。或者你简单地写一个 bash 脚本来分发你的罐子。
Flink 的命令行界面 (CLI) 允许使用 -C 选项传递额外的 jar 位置路径。我们用它来将依赖项传递给每个作业。
我们的问题:考虑到通常我们的作业在整个项目生命周期中都会发生变化,并且它们的外部依赖项会改变它们的版本,并且我们 运行 同一集群中的多个进程,我们希望 select每个 运行 中要加载的确切 jar 版本。因此,$FLINK/lib 目录对我们来说不够用。
详情:我们所做的是将 jar 分发到每个节点上的固定目录(不同于 $FLINK/lib)。稍后我们使用 CLI 启动作业(不是直接启动,因为调用很长,而是使用 bash 脚本来简化调用)。
如果您想避免依赖冲突,请不要将您的 jar 复制到 ${FLINK}/lib。如果你使用 yarn-cluster 作为你的 master,你可以使用 -yt(--yarn-ship)
,它会将 jar 复制到 hdfs 上,作为你的分布式程序类路径。