2015-04-21 4 views
23

Kann man Flink und Spark als Plattformen für maschinelles Lernen vergleichen? Was ist möglicherweise besser für iterative Algorithmen? Link zum allgemeinen Flink vs Spark Diskussion: What is the difference between Apache Spark and Apache Flink?Apache Flink vs Apache Spark als Plattformen für große Maschinen lernen?

+1

Flink ist ein relativ junges Projekt und es ist schwierig, diesen vielversprechenden Rahmen mit einem so riesigen Projekt wie Spark zu vergleichen. – ipoteka

+0

Ich werde diese Frage jetzt nicht beantworten, weil wir in naher Zukunft einen tieferen Blick auf beide ML-Frameworks werfen werden. Momentan stimme ich @ipoteka vollkommen zu. –

+2

Sie sollten sich die kürzlich von Flink entwickelte Machine Learning Library anschauen: http://ci.apache.org/projects/flink/flink-docs-master/libs/ml/. Wie Sie hier sehen können, haben wir geplant, noch viel mehr zu tun: http://goo.gl/h9Qmt3 –

Antwort

22

Haftungsausschluss: Ich bin ein PMC-Mitglied von Apache Flink. Meine Antwort konzentriert sich auf die Unterschiede beim Ausführen von Iterationen in Flink und Spark.

Apache Spark führt Iterationen durch Schleifenausrollung aus. Dies bedeutet, dass für jede Iteration eine neue Gruppe von Aufgaben/Operatoren geplant und ausgeführt wird. Spark macht das sehr effizient, weil es sehr gut bei der Task-Scheduling mit geringer Latenz ist (der gleiche Mechanismus wird für das Spark-Streaming verwendet) und zwischenspeichert die Daten im Speicher über Iterationen hinweg. Daher arbeitet jede Iteration mit dem Ergebnis der vorherigen Iteration, die im Speicher gehalten wird. In Spark werden Iterationen als reguläre for-Schleifen implementiert (siehe Logistic Regression example).

Flink führt Programme mit Iterationen als zyklische Datenflüsse aus. Dies bedeutet, dass ein Datenflussprogramm (und alle seine Operatoren) nur einmal geplant werden und die Daten von dem Ende einer Iteration zu ihrem Kopf zurückgeführt werden. Grundsätzlich fließen Daten zyklisch um die Operatoren innerhalb einer Iteration. Da Operatoren nur einmal geplant werden, können sie über alle Iterationen einen Status beibehalten. Die Flink-API bietet zwei dedizierte , um Iterationen zu spezifizieren: 1) Bulk-Iterationen, die konzeptionell dem Schleifenabwickeln ähnlich sind, und 2) delta iterations. Delta-Iterationen können bestimmte Algorithmen erheblich beschleunigen, da die Arbeit in jeder Iteration mit der Anzahl der Iterationen abnimmt. Zum Beispiel wird die 10. Iteration einer Delta-Iteration-PageRank-Implementierung viel schneller abgeschlossen als die erste Iteration.

+0

Vielen Dank für die Erklärung! Verstehe ich richtig, dass Flink Status und Operatoren auf Arbeitsknoten zwischen Iterationen beibehalten kann? Bedeutet dies möglicherweise weniger Overhead bei der Iteration als Spark, der die Aufgabe bei jeder neuen Iteration sendet? – Alexander

+4

Ja, Flink wird die Operatoren auf den Arbeitern laufen lassen (damit Sie den Status zwischen den Iterationen einfach beibehalten können). Und sparen Sie Zeit bei der erneuten Bereitstellung der Aufgaben für jede Iteration. Insbesondere mit dem von Fabian erwähnten Delta-Iterationsmerkmal sind Iterationen (an kleinen Teilen der Daten) möglich, die nur für ein paar Sekunden laufen. –

+0

Hört sich gut an! Wie lang ist der fixe Overhead in Flink für jede Iteration? Bestellung von 0,1 Sekunden? besser? Angenommen, der Algorithmus tut nichts, er iteriert nur. – Alexander