我正在开发一个应用程序,我需要在一个可能非常大的不同机器集群中分配一组任务。
理想情况下,我想在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库?
更新:
感谢Apache Hadoop的所有建议 - 看起来它可能符合要求,但是它似乎有点像矫枉过正,因为我不需要像Hadoop那样的分布式数据存储系统(即我不需要处理数十亿条记录)...更轻量级的东西,专注于计算任务,如果存在的话,它会更好。
答案 0 :(得分:8)
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在RabbitMQ之上构建的swarmiji分布式工作者框架。它不太关注数据处理,而是更多地将固定数量的任务分配给可用计算能力池。 (P.S.在他的书中,Clojure in Action)
答案 1 :(得分:7)
虽然我还没有使用它,但我认为Storm是您可能会发现有用的东西:
Storm是一个分布式实时计算系统。类似于Hadoop如何提供一组用于进行批处理的通用基元,Storm提供了一组用于进行实时计算的通用基元。风暴很简单,可以与任何编程语言一起使用,并且使用起来很有趣!
答案 2 :(得分:4)
Hadoop正是您所需要的:Apache Hadoop
答案 3 :(得分:3)