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



假设我有某种二进制文件,我想在所有任务中共享(例如,包含一个经过训练的ML模型(。如何使用DataStreamAPI进行此操作?

虽然我知道DataSetAPI中有广播变量的概念,但流似乎没有对等的概念。

我想也许我可以有一个自定义数据源,它可以发出一个值(我想要共享的Serializable,它由Flink在闭包中捕获(,并使用ValueStateDescriptor将其注册为Queryable State。这是一个可行的选择吗?

我正在寻找类似于Spark的共享变量的东西,这样我就可以允许我正在构建的东西的"客户端"在传递给"我的"操作符的lambda中使用给定的共享变量(这本质上是Flink和其他引擎之上的抽象(。

编辑:可查询状态不是一个选项,因为必须对其进行键控。

使用Flink的DataStream API有几种方法可以实现这一点。一种是使用丰富的函数,并在open()方法中加载/初始化共享数据。如果值不变,这应该可以正常工作。另一种方法是使用广播状态将共享数据分发到任何需要的地方。

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

最新更新