簡體   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