Apache flink 如何在Flink中引用外部Jar

Apache flink 如何在Flink中引用外部Jar,apache-flink,Apache Flink,各位。我试图在Flink中引用我的公司jar,将其复制到所有TaskManager中的$Flink/lib,但失败了。而且我不想装一个太胖的罐子,因为它太重而且浪费时间。我认为第一种方法也不是一个好主意,因为我必须管理整个集群中的jar。有人知道如何解决这个问题吗?任何建议都将不胜感激。一般来说,建造一个胖罐子是最好的选择。不知道你的远罐有多大,你觉得它太重了 将jar复制到$FLINK/lib应该可以工作。但是,您需要重新启动Flink,以便将JAR添加到Flink的类路径中。因此,这种方法不

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

一般来说,建造一个胖罐子是最好的选择。不知道你的远罐有多大,你觉得它太重了

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


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

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

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


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

如果要避免依赖冲突,请不要将jar复制到${FLINK}/lib。如果您使用Thread cluster作为主程序,您可以使用-yt Thread ship,它将JAR复制到hdfs上,并作为您的分布式程序类路径。

谢谢!你的回答真的帮助了我!我重新启动了Flink,一切正常。我必须承认,建造一个肥罐子是最好的方法。非常感谢!