每个人。我试图在Flink中引用我的公司jar,将其复制到所有任务管理器中的$Flink/lib,但失败了。我不想包装一个太重又浪费时间的胖罐子。我认为第一种方法也不是一个好主意,因为我必须在整个集群中管理jar。有人知道如何解决这个问题吗?任何建议都将不胜感激。
一般来说,构建一个胖罐子是最好的方法。不确定你的远罐子有多大,你认为它"太重了"?
将jar复制到$FLINK/lib
应该可以。但是,您需要重新启动Flink,以便将jar添加到Flink的类路径中。因此,这种方法不允许动态添加jar——不过,它应该适用于一堆稳定的jar。
为了管理整个集群中的jar,使用NFS文件夹作为$FLINK/lib
来保持所有TaskManager的同步可能会有所帮助。或者您只需编写一个bash脚本来分发您的jar。
我们的问题是:考虑到我们的工作通常在整个项目生命周期中不断发展,它们的外部依赖关系会改变它们的版本,并且我们在同一集群中运行多个进程,我们希望在每次运行中选择要加载的确切jar版本。因此,$FLINK/lib目录对我们来说是不够的
详细信息:我们所做的是将jar分发到每个节点上的一个固定目录(不同于$FLINK/lib(。稍后,我们使用CLI来启动作业(不是直接启动,因为调用很长,而是使用bash脚本来缩写调用(。
如果您想避免依赖冲突,请不要将您的jar复制到${FLINK}/lib。如果您使用yarn集群作为主机,那么您可以使用-yt(--yarn-ship)
,它将把jar复制到hdfs上,并作为您的分布式程序类路径。