2011-02-26 90 views
15

我正在开发一个应用程序,我需要在可能相当大的不同机器集群中分配一组任务。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的所有建议 - 看起来似乎符合该法案,但它似乎有点像矫枉过正,因为我不是一个需要分布式数据存储系统,Hadoop等用途(即我不需要处理数十亿条记录)......如果它存在,那么更轻量级的并且专注于计算任务的东西将更可取。

+0

在clojure谷歌组中,已经有关于兵马俑,GridGain和java(JMS,JXTA/shoal,JINI)标准的讨论,您可以通过谷歌搜索它们。 – 2011-03-26 03:14:15

回答

7

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. 

还检查了阿米特·拉托尔警长的swarmiji分布式工作器框架基础上的RabbitMQ之上。它不太关注数据处理,更多的是将一定数量的任务分配给可用计算能力池。 (PS这是在他的书中,Clojure in Action

+0

谢谢,看起来很有意思。尽管我对分布式处理更感兴趣,而不是大数据--Hadoop似乎更关注后者? – mikera 2011-02-28 13:00:53

+2

以我的经验Hadoop相当尴尬;设置群集需要很多工作,调试起来很棘手。如果您不需要HDFS,那么使用像RabbitMQ这样的排队系统来发送s表达式就简单多了。现在有几个库可以做到这一点,但是将Java RabbitMQ客户端封装在几页Clojure代码中很容易被“留作阅读者的练习”领域。 – technomancy 2011-02-28 17:33:55

7

虽然我还没有得到对尚未使用它,我认为Storm的东西,你可能会发现有益的探索:

风暴是一个分布式实时计算系统。与Hadoop为批量处理提供一组通用基元类似,Storm提供了一组用于实时计算的基本元素。 Storm很简单,可以与任何编程语言一起使用,并且使用起来非常有趣!

2

Storm可能比Hadoop更适合您的需求,因为它没有分布式数据存储并具有低延迟。可以分解和处理数据,与MapReduce类似,Trident api使得这非常简单。

它部分是用Clojure编写的,所以我猜Clojure互操作比较容易。

另一个选项是Onyx,它提供了类似的功能,但它是一个纯粹的基于Clojure的项目。