2017-04-13 9 views
2

私は木で記述できる方程式を持っています。したがって、葉は親頂点が数学演算子である値であり、計算が完了すると、別の値が親頂点の位置に現れ、親頂点を持つ葉(数学演算子として)になります。あなたが追求している支店に応じて、木はバランスが取られておらず、不均等な深さを持つことがあります。Apache Ignite map-reduce方程式を解く方法

私が知る必要があるのは、Apacheのignite(自分のニーズに合ったイベント伝達メカニズムのために私はそれを選んだ)をどのように使用するかです。等式が計算されるまで計算を繰り返す。

私はこれに間違った技術を使用していますか?

この問題はmap-reduce技術には適していませんか?

イベント伝達技術も組み込まれた、最高のテクノロジーとは何でしょうか?

私は恵みを置くだけで1ポイントの短いんだ...

EDIT:追加さ奨励金。基本的に私の要求は、分散コンピューティングソリューションで変わるサブ問題を、類似のものがマップ削減されているものよりも計算することです。解決策はありますか?どのような考えが評価されます。

+0

信用できる公式ソースはAPIを意味します。 – Ram

答えて

3

Igniteで可能です。 ComputeTaskAdaptermap()reduce()メソッドを実装する必要があります。最初の方法はタスクをノードにマップし、2番目の方法は計算結果を収集します。 exampleを参照してください。

その後、以前に返された結果のコレクションを減らした場合は、再度実行することができます。

データ転送量を減らすには、キャッシュを使用し、その中に中間データを格納することができます。タスクをデータを必要とするノードにマップすると、すべてのエントリーがローカルでそのタスクで使用可能になり、リモート・ノードからそれらを照会する必要はありません。あなたがここにdataNode

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

を使用することができ、このようにタスクをマップするには、このキーのプライマリ・ノードであり、タスクはそれで起動する場合は、全体のエントリがローカルで利用できるようになります。

+0

ありがとう!私はそれが行く方法ですが、問題は少しトリッキーです。あなたが示した_dataNode_は役に立ちますが、マップ作業を送信するたびに、それは 'var1 var2'の形であり、' var1'はあるノードに、 'var2'は別のノードにあります。結果が同じレベルの葉である場合にのみ作業を減らす必要があります。ですから、結果を繰り返し処理して結合するためには、外部の結果をマップ/リダクションメソッドに保存する必要があります。私は静的クラスでそれを行うことができますが、マップを実行することができます/繰り返し、ループのようないくつかのレベルの方程式ツリーのすべてのレベルまで行われますか? – Ram

+0

私はあなたの答えを正しいものとしてマークしました。明日賞金を自動的に贈ります。あなたは私の質問の残りの部分に答えることができますか? – Ram

+0

私はあなたのタスクツリーをサブツリーに分割する必要があると思います。各サブツリーは単一ノードにバインドされるため、クラスタ上でタスク全体を並列化することができます。私は使い方をすると思います。クライアントはノードにマップしますが、ローカルでのみマップを繰り返し実行します。各サブツリーがそれを実行すると、最終処理を行うマスタノードになる。ありがとう! :) –