我有一个(Java)批处理管道,它遵循以下模式:
(FileIO)
(ExtractText > input=1 file, output=millions of lines of text)
(ProcessData)
ProcessData 阶段包含缓慢的部分(将数据与大白名单匹配),并且需要在多个工作线程上进行扩展,这应该不是问题,因为它只包含 DoFns。然而,我的一对多阶段似乎强制所有输出仅由一名工作人员处理(实例化更多工作人员会使它们除一名工作人员外全部闲置,或者如果启用自动缩放,则缩小规模)。
基于其他 stackoverflow 条目,我尝试通过Reshuffle.viaRandomKey()
。这不起作用,因为Reshuffle
包含一个GroupByKey
它将所有结果加载到内存中,导致 OOM,即使我预先通过Window.<String>into(FixedWindows.of(Duration.standardSeconds(1)))
另一种选择是创建一个 CustomSource 来替换前两个阶段,但我发现这种方法不够充分,因为 1) 自定义源的文档严重缺乏 2) 需要更多的时间和代码来实现 3) 这种一对多在管道中间很可能会遇到问题,我无法创建自定义源。
我应该如何处理数据流管道中的一对多阶段?
None
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)