Datenflussverarbeitung

8

Ich habe eine Klasse von Berechnungen, die natürlich eine Graphenstruktur zu haben scheint. Der Graph ist weit davon entfernt, linear zu sein, da es mehrere Eingänge gibt, sowie Knoten, die sich ausbreiten, und Knoten, die das Ergebnis mehrerer anderer Knoten erfordern. Bei all diesen Berechnungen gibt es möglicherweise auch mehrere Senken. Keine Zyklen sind jedoch jemals vorhanden. Die Eingangsknoten werden aktualisiert (nicht notwendigerweise einzeln) und ihre Werte fließen durch den (in diesem Punkt rein konzeptionellen) Graphen. Die Knoten behalten den Status bei, wenn sich die Eingänge ändern, und die Berechnungen müssen sequenziell in Bezug auf die Eingänge ausgeführt werden.

Da ich solche Berechnungen ziemlich häufig schreiben muss und ich jedes Mal nicht bereit bin, Ad-hoc-Code zu schreiben, habe ich versucht, eine kleine Bibliothek zu schreiben, um solche Berechnungen durch Schreiben von Klassen für die verschiedenen Knoten einfach zusammenzusetzen. Mein Code ist jedoch ziemlich unelegant, und die Parallelstruktur dieser Berechnungen wird nicht ausgenutzt. Während jeder Scheitelpunkt normalerweise leicht ist, können Berechnungen ziemlich komplex und "weit" werden. Um das Problem noch komplizierter zu machen, werden die Eingaben für diese Berechnungen sehr häufig in einer Schleife aktualisiert. Zum Glück sind die Probleme klein genug, dass ich sie auf einem einzigen Knoten behandeln kann.

Hat jemand jemals etwas Ähnliches behandelt? Welche Ideen / Ansätze / Tools würden Sie empfehlen?

    
em70 18.11.2015, 03:26
quelle

1 Antwort

2

Apache Storm: Zuverlässige Echtzeit-Stream-Verarbeitung auf verteilter Hardware

Das klingt nach einem Problem, für das Apache Storm (Open Source) perfekt wäre: Ссылка

Bei Apache Storm handelt es sich um Echtzeit-Streaming-Berechnungen, bei denen einzelne Tupel (Datenpunkte) einzeln verarbeitet werden. Storm garantiert, dass jedes Tupel mindestens einmal bearbeitet wird. Mit Storm Trident können Sie Storm weiter abstrahieren und genau einmal Semantiken erhalten.

  

Apache Storm ist eine freie und Open-Source-verteilte Echtzeit   Berechnungssystem. Storm macht es einfach, unbegrenzt zuverlässig zu verarbeiten   Datenströme, die für die Echtzeitverarbeitung von Hadoop getan werden   Stapelverarbeitung.

Meine Firma und ich arbeiten seit einigen Jahren mit Apache Storm und es ist eine der ausgereiftesten Big-Data-Technologien. Big-Data-Technologie ist eine Technologie, die horizontal verteilt (auf billiger Hardware) läuft.

API und Dokumentation

Die Haupt-API ist für Java, aber es gibt Adapter für Ruby, Python, Javascript, Perl. Sie können jedoch jede Sprache verwenden: Ссылка

Die Dokumentation ist gut (obwohl JavaDoc einige weitere Details verwenden könnte): Ссылка

Grundidee - Spouts and Bolts (= Graphknoten)

Storm verfügt über Spouts, mit denen Sie Daten in Ihre so genannte Topologie einlesen können. Die Topologie ist dieser Graph, den Sie beschrieben haben. Wenn neue Tupel in die Tüllen eintreten, werden sie durch die Topologie gesendet. Jeder der Knoten ist einer der Sturmbolzen.

Anwendungsfälle

  

Storm hat viele Anwendungsfälle: Echtzeit-Analyse, Online-maschinelles Lernen,   kontinuierliche Berechnung, verteilter RPC, ETL und mehr. Sturm ist schnell:   Ein Benchmark taktete bei über einer Million verarbeiteten Tupeln pro Sekunde   pro Knoten. Es ist skalierbar, fehlertolerant und garantiert Ihre Daten   verarbeitet und ist einfach einzurichten und zu betreiben.

    
Make42 27.11.2015 08:55
quelle