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