Distributed-computing-framework für Clojure/Java
Entwickle ich eine Anwendung, wo ich verteilen müssen eine Reihe von Aufgaben, die über einen potenziell sehr großen cluster von verschiedenen Maschinen.
Idealerweise möchte ich eine sehr einfache, idiomatische Weise, dies zu tun in Clojure, z.B. so etwas wie:
; create a clustered set of machines
(def my-cluster (new-cluster list-of-ip-addresses))
; define a task to be executed
(deftask my-task (my-function arg1 arg2))
; run a task 10000 times on the cluster
(def my-job (run-task my-cluster my-task {:repeat 10000})
; do something with the results:
(some-function (get-results my-job))
Bonus, wenn es etwas tun kann, wie Map-reduce " - auf die cluster.....
Was ist der beste Weg, etwas zu erreichen, wie diese? Vielleicht könnte ich wickeln Sie eine entsprechende Java-Bibliothek?
UPDATE:
Danke für den Vorschlag, die Apache-Hadoop - wie es aussieht, könnte die Rechnung passen, aber es scheint ein wenig wie overkill, da bin ich nicht benötigen eine verteilte Daten-storage-system wie Hadoop verwendet (d.h. ich brauche nicht zu verarbeiten Milliarden von Datensätzen)... etwas mehr leicht und konzentrierte sich auf die Rechen-Aufgaben nur dann vorzuziehen, wenn Sie existiert.
- in der clojure google-Gruppe, gab es Diskussionen darüber, Terrakotta, GridGain und java (JMS, JXTA/shoal, JINI ) - standards, können Sie google für Sie.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hadoop ist die Basis für fast alle großen Maßstab big data Aufregung in der Clojure-Welt in diesen Tagen, obwohl es bessere Möglichkeiten gibt als mit Hadoop direkt.
Cascalog ist eine sehr populäre front-end:
Schauen Sie sich auch Amit Rathor ist swarmiji distributed worker-framework bauen auf RabbitMQ. es ist weniger fokussiert auf die Daten-Verarbeitung und mehr auf die Verteilung einer festen Anzahl von Aufgaben zu einem pool der verfügbaren Rechenleistung. (P. S. Es ist in seinem Buch, Clojure in Action)
Obwohl ich noch nicht dazu gekommen, es zu benutzen aber, ich denke, dass Sturm ist etwas, dass Sie vielleicht nützlich finden, um zu erkunden:
Hadoop ist genau das, was Sie brauchen: Apache Hadoop
Sturm könnten Ihre Bedürfnisse besser als Hadoop, da es noch keine distributed data storage und hat eine geringe Latenz. Es ist möglich, Aufspaltung und Verarbeitung von Daten, ähnlich wie MapReduce, die Trident api macht dies sehr einfach.
Ist es teilweise geschrieben Clojure, so nehme ich an-interop Clojure ist einfacher.
Weitere option ist Onyx das bietet ähnliche Funktionalität, sondern ist eine Reine Clojure-basierten Projekt.