mejor - Framework de computación distribuida para Clojure/Java
javahispano (4)
Aunque aún no lo he usado, creo que Storm es algo que podría ser útil explorar:
Storm es un sistema de computación distribuida en tiempo real. De manera similar a cómo Hadoop proporciona un conjunto de primitivas generales para realizar el procesamiento por lotes, Storm proporciona un conjunto de primitivas generales para realizar cálculos en tiempo real. Storm es simple, se puede usar con cualquier lenguaje de programación y es muy divertido de usar.
Estoy desarrollando una aplicación en la que necesito distribuir un conjunto de tareas en un grupo potencialmente grande de diferentes máquinas.
Idealmente, me gustaría una forma muy simple e idiomática de hacer esto en Clojure, por ejemplo, algo como:
; 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))
Bonificación si también puede hacer algo como Map-Reduce en el cluster ...
¿Cuál es la mejor manera de lograr algo como esto? Tal vez podría envolver una biblioteca de Java apropiada?
ACTUALIZAR:
Gracias por toda la sugerencia de Apache Hadoop: parece que se ajusta a la cuenta, sin embargo, parece un poco exagerado ya que no necesito un sistema de almacenamiento de datos distribuidos como el que usa Hadoop (es decir, no necesito procesar miles de millones de registros). ) ... algo más ligero y enfocado en tareas de cómputo solo sería preferible si existe.
Hadoop es exactamente lo que necesitas: Apache Hadoop
Hadoop es la base de casi toda la emoción de big data a gran escala en el mundo de Clojure en estos días, aunque hay mejores maneras de usar Hadoop directamente.
Cascalog es un extremo muy popular:
Cascalog is a tool for processing data on Hadoop with Clojure in a concise and expressive manner. Cascalog combines two cutting edge technologies in Clojure and Hadoop and resurrects an old one in Datalog. Cascalog is high performance, flexible, and robust.
También swarmiji marco de trabajo de swarmiji distribuido de Amit Rathor sobre RabbitMQ. está menos centrado en el procesamiento de datos y más en la distribución de un número fijo de tareas a un grupo de potencia informática disponible. (PS Está en su libro, Clojure en Acción )
Storm puede satisfacer sus necesidades mejor que Hadoop, ya que no tiene almacenamiento de datos distribuidos y tiene una latencia baja. Es posible dividir y procesar datos, de manera similar a MapReduce, la api de Trident hace muy simple.
Está parcialmente escrito en Clojure, así que supongo que la interoperabilidad de Clojure es más fácil.
Otra opción es Onyx que ofrece una funcionalidad similar, pero es un proyecto basado únicamente en Clojure.