【问题标题】:How to Reference the External Jar in Flink如何在 Flink 中引用外部 Jar
【发布时间】:2015-08-03 09:38:15
【问题描述】:

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

【问题讨论】:

    标签: apache-flink


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢!你的回答对我很有帮助!我重新启动了 Flink,一切正常。我不得不承认,建造一个胖罐子是最好的方法。非常感谢!
    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-05-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多