[英]Apache Beam DirectRunner enable multi threaded processing of different ParDo/DoFn
我将 Apache Beam 与 DirectRunner 一起使用。 我有 5 个用 ParDos 包裹的 DoFns,它们一个接一个地应用。 当 Pipeline 运行时,首先 DoFn 处理它的所有工作,然后是第二个,然后是第三个。 我希望第二个 DoFn 在第一个发出 output 后立即开始工作,以便处理将是并行的,因为目前在任何给定时间最多有一个 DoFn 正在工作(相关: Apache Beam 中的 DoFn 的线程同步)。
val pipelineOptions = PipelineOptionsFactory
.fromArgs("--streaming", "--experiments=use_runner_v2")
.withValidation()
.create()
.`as`(DirectOptions::class.java)
pipelineOptions.isBlockOnRun = true
pipelineOptions.isEnforceEncodability = true
pipelineOptions.isEnforceImmutability = true
pipelineOptions.targetParallelism = Runtime.getRuntime().availableProcessors() * 2
pipelineOptions.appName = name
val pipeline = Pipeline.create(pipelineOptions)
pipeline
.apply(...)
.apply(...)
.apply(...)
.apply(...)
.apply(...)
.apply(...)
pipeline
.run()
.waitUntilFinish()
Java DirectRunner 已经独立且异步地执行每个阶段。 它有固定数量的工作线程。 您遇到的情况是由于您的输入都在一个包中,因此它们都一起提交。 DirectRunner 不会重新捆绑输入,因此捆绑将一起通过管道。
如果您有一个真正的流式无界数据源,DirectRunner 将处理从源发出的每个包。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.