2017-05-24 3 views
-2

Ich habe einen Python beam.DoFn, der eine Datei ins Internet hochlädt. Dieser Prozess verwendet 100% eines Kerns für ~ 5 Sekunden und fährt dann mit dem Hochladen einer Datei für 2-3 Minuten fort (und verwendet einen sehr kleinen Bruchteil der CPU während des Uploads).Optimiert Google Cloud Dataflow die IO-gebundenen Prozesse?

Ist DataFlow intelligent genug, um dies zu optimieren, indem mehrere DoFns in separaten Threads/Prozessen erstellt werden?

Antwort

0

Ja Dataflow wird mehrere Instanzen eines DoFn mit Python-Multiprocessing ausführen.

Beachten Sie jedoch, dass der ParDo bei Verwendung eines GroupByKey Elemente für einen bestimmten Schlüssel seriell verarbeitet. Sie erreichen dennoch Parallelität auf dem Worker, da Sie mehrere Schlüssel gleichzeitig verarbeiten. Wenn sich jedoch alle Ihre Daten auf einem einzelnen "Hot Key" befinden, erzielen Sie möglicherweise keine gute Parallelität.

Verwenden Sie TextIO.Write in einer Batch-Pipeline? Ich glaube, dass die Dateien lokal vorbereitet und dann hochgeladen werden, nachdem Ihr Haupt-DoFn verarbeitet wurde. Das heißt, die Datei wird erst hochgeladen, wenn die PCollection abgeschlossen ist und keine weiteren Elemente erhalten.

Ich glaube nicht, dass es die Dateien ausströmt, wie Sie Elemente produzieren.

Verwandte Themen