创建一个可以被数据流中的所有线程访问的对象

时间:2017-04-18 01:27:17

标签: google-cloud-dataflow

我想创建一个可以被所有线程访问(读写方式)的对象(如共享内存)。虽然对于这个问题不重要,但该对象是一个哈希映射,我可以从所有线程读取/写入数据。它就像一个读写共享var。

有没有办法在数据流中执行此操作?

在我的情况下,我可以“破解”一个关键要求,并让这个共享var对其正在运行的节点“本地”。因此,如果有一种方法可以创建(对于每个实例节点)一个静态var,其中在给定节点内的所有线程都可以访问,这对我来说很有用。

我想也许我可以在startBundle方法中创建一个静态var(使用工厂方法),但我在某处读到了不推荐用于流数据流方案(因为有很多startBundle调用)。那么,我可以在ParDo的构造函数中创建它吗?那可以接受吗?如果是这样,给定节点上的所有线程是否能够访问此静态var? (我当然可以测试它,但它可能不是每个df规范或指南的“可接受”解决方案。)或者,还有另一种方法吗?我正在使用dataflow sdk 1.9.0

1 个答案:

答案 0 :(得分:0)

如果您只需要每台计算机的共享状态,则可以使用静态变量和适当的锁定来完成此操作。

如果需要跨机器协调状态,可以在Apache Beam java SDK中尝试新的State API:https://beam.apache.org/blog/2017/02/13/stateful-processing.html