簡體   English   中英

Clojure / Java的分布式計算框架

[英]Distributed computing framework for 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庫?

更新:

感謝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 Rathorswarmiji分布式工作者框架構建在RabbitMQ之上。 它不太關注數據處理,而是更多地將固定數量的任務分配給可用計算能力池。 (PS在他的書中, Clojure in Action

雖然我還沒有使用它,但我認為風暴是你可能會發現有用的東西:

Storm是一個分布式實時計算系統。 類似於Hadoop如何提供一組用於進行批處理的通用基元,Storm提供了一組用於進行實時計算的通用基元。 風暴很簡單,可以與任何編程語言一起使用,並且使用起來很有趣!

Hadoop非常適合您的需求: Apache Hadoop

Storm可能比Hadoop更適合您的需求,因為它沒有分布式數據存儲並且具有低延遲。 分割和處理數據是可能的,類似於MapReduce, Trident api使這非常簡單。

它部分用Clojure編寫,所以我認為Clojure interop更容易。

另一種選擇是Onyx ,它提供類似的功能,但它是一個純粹的基於Clojure的項目。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM