2015-11-24 10 views

Antwort

5

Wenn Flink iterative Programme ausführt, ist das Datenflussdiagramm kein DAG, sondern ermöglicht Zyklen. Diese Zyklen sind jedoch nicht willkürlich und müssen einem bestimmten Muster folgen, damit Flink diesen zyklischen Fluss zu einem gewissen Grad kontrollieren kann.

In anderen Systemen gibt es oft keinen strengen technischen Grund dafür, Zyklen nicht zu unterstützen. Das allgemeine Zulassen von Zyklen ist normalerweise verboten, da dies zu einer Endlosschleife führen kann (dh ein Tupel dreht den Zyklus für immer und das Programm wird nicht terminiert).

Flink verfolgt den Zyklus, indem er die Anzahl der Iterationen zählt. Auf diese Weise kann Flink verfolgen, welche Tupel zu welcher Iteration gehören und beispielsweise vermeiden, dass Tupel von neuer Iteration einmal Tupel von älteren "übernehmen". Außerdem kann Flink erkennen, ob das Ergebnis der Iteration n und n+1 gleich ist oder nicht. Ein gleiches Ergebnis zeigt eine beendete Berechnung an, die es Flink erlaubt, die Endlosschleife zu unterbrechen und zu beenden (dies gilt für sogenannte Fixpunkt-Iterationen).

Eine ausführliche Lese Blick auf diese Forschungsarbeit: https://dl.acm.org/citation.cfm?id=2350245

Die Verwendung von Iteration in Ihrem Programm hier beschrieben wird: https://ci.apache.org/projects/flink/flink-docs-release-0.10/apis/programming_guide.html#iteration-operators

+1

Technisch Flink keine Wiederholungszähler zu jedem Tupel zuweisen. Stattdessen wird jede Iteration ausgeführt und dann gewartet, bis alle Elemente für diese Iteration verarbeitet wurden. Erst dann wird die nächste Iteration gestartet. –

+1

Meine Antwort wurde aktualisiert. Der Downvote ist ziemlich hart ... :) –

Verwandte Themen