Я разрабатываю приложение, где мне нужно распределить набор задач в потенциально довольно большом кластере разных машин.
В идеале мне нужен очень простой, идиоматический способ сделать это в Clojure, например. что-то вроде:
; 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))
Бонус, если он может сделать что-то вроде Map-Reduce на кластере, а также...
Какой лучший способ добиться чего-то подобного? Может быть, я могу обернуть соответствующую библиотеку Java?
UPDATE:
Спасибо за все предложение Apache Hadoop - похоже, что он может соответствовать законопроекту, однако он кажется немного похож на overkill, так как мне не нужна распределенная система хранения данных, например, Hadoop (т.е. мне не нужно обрабатывать миллиарды записей)... что-то более легкое и сосредоточенное на вычислительных задачах было бы предпочтительнее, если оно существует.