11

每个人。我试图在 Flink 中引用我的公司 jar,将其复制到所有任务管理器中的 $FLINK/lib 中,但失败了。而且我不想打包一个胖罐子,太重了,浪费时间。我认为第一种方法也不是一个好主意,因为我必须管理整个集群中的 jars。任何人都知道如何解决这个问题?任何建议将不胜感激。

4

3 回答 3

14

一般来说,建造一个胖罐子是最好的方法。不确定您的远罐有多大,您认为它“太重”?

将罐子复制到$FLINK/lib应该可以工作。但是,您需要重新启动 Flink,以便将 jars 添加到 Flink 的类路径中。因此,这种方法不允许动态添加罐子——但是它应该适用于一堆稳定的罐子。

为了管理整个集群中的 jar,使用 NFS 文件夹$FLINK/lib来保持所有 TaskManager 同步可能会有所帮助。或者您只需编写一个 bash 脚本来分发您的 jar。

于 2015-08-03T10:57:35.730 回答
1

Flink 的命令行界面 (CLI) 允许使用 -C 选项传递额外的 jar 位置路径。我们使用它将依赖项传递给每个作业。

我们的问题:鉴于我们的作业通常在整个项目生命周期中不断发展,并且它们的外部依赖项会更改它们的版本,并且我们在同一个集群中运行多个进程,因此我们希望在每次运行时选择要加载的确切 jar 版本。因此,$FLINK/lib 目录对我们来说是不够的。

详细信息:我们所做的是将 jar 分发到每个节点上的固定目录(不同于 $FLINK/lib)。稍后我们使用 CLI 启动工作(不是直接调用,因为调用很长,而是使用 bash 脚本来缩写调用)。

于 2017-08-09T07:55:42.080 回答
1

如果您想避免依赖冲突,请不要将您的 jar 复制到 ${FLINK}/lib。如果你使用 yarn-cluster 作为你的 master,你可以使用-yt(--yarn-ship),它会将 jars 复制到 hdfs 并作为你的分布式程序类路径。

于 2017-11-21T12:00:21.480 回答