如何在Flink中引用外部Jar

时间:2015-08-03 09:38:15

标签: apache-flink

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

3 个答案:

答案 0 :(得分:12)

一般来说,建造一个肥胖罐子是最好的方法。不知道你的远远的罐子有多大,你认为它太“重”了?

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

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

答案 1 :(得分:1)

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

我们的问题:鉴于通常我们的工作在整个项目生命周期中发展,并且他们的外部依赖关系改变了他们的版本,并且我们在同一个集群中运行多个进程,我们想要选择在每次运行中加载的确切jar版本。因此,$ FLINK / lib目录对我们来说还不够。

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

答案 2 :(得分:1)

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