2017-04-13 73 views
2

我有一個可以用樹描述的方程。因此,葉子是父頂點是數學運算符的值,當計算完成時,另一個值出現在父頂點的位置,並且它變成具有父頂點的葉子(作爲數學運算符)。樹不平衡,可能會有不均衡的深度,具體取決於您所追求的分支。Apache Ignite map-reduce解方程的方式

我需要知道的是如何使用Apache點燃(我選擇它是因爲它的事件傳播機制適合我的需要),以通過發送所有葉子在不同深度(以及它們的父頂點)進行並行化計算等,直到計算公式。

我使用了錯誤的技術嗎?

這個問題不適合map-reduce技術嗎?

什麼是最好的技術,它也有內置的事件傳播技術?

我只是1點短把一個賞金...

編輯:添加賞金。本質上,我的要求是計算分佈式計算解決方案中的變量子問題,而不是進行映射縮減的類似問題。有任何解決方案?任何想法都表示讚賞。

+0

可信和/或官方消息來源表示API。 – Ram

回答

3

Ignite有可能。您需要實施ComputeTaskAdaptermap()reduce()方法。第一種方法將您的任務映射到節點,第二種方法收集計算結果。請參閱example

之後,如果上次減少返回的結果集合,則可以再次運行它。

爲了減少數據傳輸量,您可以使用緩存,並在其中存儲中間數據。如果將任務映射到具有所需數據的節點,則所有條目都可在本地用於該任務,並且不需要從遠程節點查詢它們。以這種方式映射的任務,你可以使用

ClusterNode dataNode = ignite.affinity("cacheName").mapKeyToNode("key");

這裏dataNode此鍵主節點,如果任務將在它啓動,整個項目將在當地有售。

+0

非常感謝!我意識到這是要走的路,但問題有點棘手。您顯示的_dataNode_有幫助,但每次發出地圖工作時,它都將採用'var1 var2'的形式,其中'var1'可以位於一個節點上,而var1位於另一個節點上。只有結果來自同一級別的葉子,我才需要減少工作量。所以我需要存儲map/reduce方法外部的結果來重複處理和加入結果。我可以在靜態類中做到這一點,但我可以反覆運行map/reduce,有點像在循環中,直到方程樹的所有級別完成爲止? – Ram

+0

我標記你的答案是正確的。它會明天自動給予賞金。任何機會,你可以回答我的問題的其餘部分? – Ram

+0

我認爲您需要在子樹上拆分任務樹,其中每個子樹都將綁定到單個節點,因此您將能夠在羣集上並行執行整個任務。我想下面的用法。客戶端映射到節點只能在本地重複執行映射縮減的任務。當每個子樹完成它的結果到主節點,它進行最終處理。謝謝! :) –