如何在任务之间共享二进制文件?

时间:2018-07-30 13:35:27

标签: apache-flink flink-streaming

比方说,我想在所有任务之间共享某种二进制文件(例如,包含训练有素的ML模型)。如何使用DataStream API?

虽然我了解DataSet API中有broadcast variables的概念,但似乎没有等效的流媒体内容。

我想也许我可以有一个自定义数据源,该数据源发出一个值(我要共享的Serializable,该值由闭包内部的Flink捕获),并使用{{1 }}。这是一个可行的选择吗?

我正在寻找类似于Spark's shared variables的东西,以便允许我正在构建的东西的“客户端”在将其传递给“我的”运算符的lambda中使用给定的共享变量(实质上是是Flink和其他引擎之上的抽象)。

编辑:鉴于必须将其设为键,因此无法选择可查询状态。

1 个答案:

答案 0 :(得分:1)

有两种方法可以使用Flink的DataStream API来解决此问题。一种是使用rich functions,然后以open()方法加载/初始化共享数据。如果该值不变,则应该可以正常工作。另一种方法是使用broadcast state在需要的地方分发共享数据。

需要应用训练有素的ML模型的典型流应用程序将使用一些有状态的运算符来计算特征,然后将组合的特征向量馈入已加载模型的RichFlatMap中。