繁体   English   中英

Apache Beam DirectRunner 启用不同 ParDo/DoFn 的多线程处理

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM