Clojure/Java的分布式计算框架

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那样使用分布式数据存储系统(即我不需要处理数十亿条记录)...更轻量级的东西,专注于计算任务,如果存在的话,它会更好.

Art*_*ldt 8

尽管有比直接使用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 Rathorswarmiji分布式工作者框架构建在RabbitMQ之上.它不太关注数据处理,而是更多地将固定数量的任务分配给可用计算能力池.(PS在他的书中,Clojure in Action)

  • 根据我的经验,Hadoop很尴尬; 设置集群需要做很多工作,而且调试起来很棘手.如果你不需要HDFS,那么使用像RabbitMQ这样的排队系统来运送s表达式要简单得多.现在有一些库可以做到这一点,但是将Java RabbitMQ客户端包装在几页Clojure代码中很容易被"留作读者操作"的领域. (2认同)

Dav*_* J. 7

虽然我还没有使用它,但我认为风暴是你可能会发现有用的东西:

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