Распределенная вычислительная среда для Clojure/Java
Я разрабатываю приложение, где мне нужно распределить набор задач в потенциально довольно большом кластере разных машин.
В идеале мне нужен очень простой, идиоматический способ сделать это в 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 (т.е. мне не нужно обрабатывать миллиарды записей)... что-то более легкое и сосредоточенное на вычислительных задачах было бы предпочтительнее, если оно существует.
Ответы
Ответ 1
Hadoop является базой для почти всех крупных масштабных волнений в мире Clojure в наши дни, хотя есть более эффективные способы, чем использование Hadoop напрямую.
Cascalog - очень популярный интерфейс:
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.
Также проверьте Amit Rathor swarmiji распределенную рамочную структуру работ над RabbitMQ. он менее ориентирован на обработку данных и больше на распределение фиксированного количества задач в пул доступных вычислительных мощностей. (P.S. Это в его книге Clojure в действии)
Ответ 2
Хотя я еще не использовал его, я думаю, что Storm - это то, что вам может показаться полезным:
Storm - это распределенная система вычислений в реальном времени. Подобно тому, как Hadoop предоставляет набор общих примитивов для пакетной обработки, Storm предоставляет набор общих примитивов для выполнения вычислений в реальном времени. Шторм прост, может использоваться с любым языком программирования и очень полезен!
Ответ 3
Hadoop - это то, что вам нужно: Apache Hadoop
Ответ 4
Storm может удовлетворить ваши потребности лучше, чем Hadoop, поскольку он не имеет распределенного хранения данных и имеет низкое задержка. Можно разделить и обработать данные, похожие на MapReduce, Trident api делает это очень простым.
Это частично написано в Clojure, поэтому я полагаю, что Clojure interop проще.