mik*_*era 17 java parallel-processing clojure distributed-computing
我正在开发一个应用程序,我需要在一个可能非常大的不同机器集群中分配一组任务.
理想情况下,我想在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))
Run Code Online (Sandbox Code Playgroud)
如果能在集群上做Map-Reduce之类的话也可以获得奖励......
实现这样的目标的最佳方法是什么?也许我可以包装一个合适的Java库?
更新:
感谢Apache Hadoop的所有建议 - 看起来它可能符合要求,但是它看起来有点像矫枉过正,因为我不需要像Hadoop那样使用分布式数据存储系统(即我不需要处理数十亿条记录)...更轻量级的东西,专注于计算任务,如果存在的话,它会更好.
尽管有比直接使用Hadoop更好的方法,Hadoop是Clojure世界几乎所有大规模大数据兴奋的基础.
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之上.它不太关注数据处理,而是更多地将固定数量的任务分配给可用计算能力池.(PS在他的书中,Clojure in Action)