Clojure / Java的分布式计算框架

时间:2011-02-26 16:48:41

标签: java clojure parallel-processing 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))

如果可以在集群上执行类似Map-Reduce的操作,那就获得奖励......

实现这样的目标的最佳方法是什么?也许我可以包装一个合适的Java库?

更新:

感谢Apache Hadoop的所有建议 - 看起来它可能符合要求,但是它似乎有点像矫枉过正,因为我不需要像Hadoop那样的分布式数据存储系统(即我不需要处理数十亿条记录)...更轻量级的东西,专注于计算任务,如果存在的话,它会更好。

4 个答案:

答案 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)

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

部分是用Clojure编写的,所以我认为Clojure interop更容易。

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