[
https://issues.apache.org/jira/browse/BEAM-12335?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17344230#comment-17344230
]
Kenneth Knowles commented on BEAM-12335:
----------------------------------------
Fusion does not help high fanout, really. Assuming post-fanout transforms are
roughly 1:1 ratio. Fusion breaks are what you do, so that the high fanout is
buffered in a storage system and processed in separate bundles. I think the
feature here would be DirectRunner re-bundling elements. I believe today, all
elements output from a bundle are enqueue as a single downstream bundle.
PCollections do not have individual queues. Instead each bundle is placed on
the ExecutorService queue. Bundles are not split. For high fanout, that is what
you need.
> Apply basic fusion to Java DirectRunner to avoid keeping all intermittent
> results in memory
> --------------------------------------------------------------------------------------------
>
> Key: BEAM-12335
> URL: https://issues.apache.org/jira/browse/BEAM-12335
> Project: Beam
> Issue Type: Improvement
> Components: runner-direct
> Reporter: Boyuan Zhang
> Priority: P2
>
> Current java direct runner doesn't fuse transforms into steps. Instead, it
> almost executes each transform one by one. It results in memory pressure when
> any transform is high-fanout.
> We already have a simple fusion logic in Java
> SDK(https://github.com/apache/beam/blob/master/runners/core-construction-java/src/main/java/org/apache/beam/runners/core/construction/graph/GreedyPipelineFuser.java).
> Work remaining here might be:
> * Apply such fusion into DirectRunner
> * Change the DirectRunner to be able run the fused steps.
> I understand that DirectRunner doesn't expect processing large volume data
> and changing DirectRunner execution might be a fair amount of work.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)