0

誰かが以前にこれを行ったことがあることを願っています。または、Gridgain がこの機能をサポートしているかどうかをアドバイスできる人がいれば幸いです。

私のユースケースは次のとおりです。

  1. ワークスティーリングをサポートするように変更された examples/config/example-compute.xml を使用して、Gridgain ノードを開始します (以下を参照)。
  2. 300 個のタスクをクラスターに送信します。それらは最初のノードで実行を開始しますが、実行に時間がかかるため、未処理のタスクのキューが長くなります。
  3. 同じ構成を使用して新しいノードを開始し、クラスターに参加するのを確認します
  4. ノード 2 は最初のノードから作業の一部を盗むべきではありませんか? 残念ながらそうではなく、ノード 2 が何もしない間、ノード 1 ですべてのタスクが完了するのを待つ必要があります。

GridJobStealingCollisionSpiデバッグ ログをオンにすると、ログに次のメッセージが表示されるので、何かをしていると思います: Thief node does not belong to task topology [...]. GridJobStealingCollisionSpiソースを調べてみると、盗んでいるノードがタスクが送信されたトポロジにあるかどうかを確認していると思います。

私のユースケースが期待どおりに機能しているのを見た人はいますか?

example-compute.xml (ファイル全体は pastebin.com/gGsfEebG にあります) を変更して、以下の構成を追加することでワーク スティーリングをサポートしました。

<property name="collisionSpi">
    <bean class="org.gridgain.grid.spi.collision.jobstealing.GridJobStealingCollisionSpi">
        <property name="activeJobsThreshold" value="50" />
        <property name="waitJobsThreshold" value="10" />
        <property name="messageExpireTime" value="1000" />
        <property name="maximumStealingAttempts" value="100" />
        <property name="stealingEnabled" value="true" />
    </bean>
</property>
<property name="failoverSpi">
    <bean class="org.gridgain.grid.spi.failover.jobstealing.GridJobStealingFailoverSpi">
        <property name="maximumFailoverAttempts" value="5" />
    </bean>
</property>
<property name="metricsUpdateFrequency" value="1000"/>

私の Java クラスは、http: //pastebin.com/AS8iKqjjの Pastebinにあります。実行するための詳細な手順は次のとおりです。

  1. ノードを起動し、5 秒間スリープする 300 個のジョブをクラスターに送信する ComputeSleepExample クラスを実行します。

    java -DGRIDGAIN_DEBUG_ENABLED=true -DGRIDGAIN_QUIET=false -cp examples/config:examples/target/classes:examples/target/libs/*:target/gridgain-‌​6.1.9.jar:modules/spring/target/gridgain-spring-6.1.9.jar org.gridgain.examples.compute.ComputeSleepExample 300 5000

  2. 新しいノードを開始すると、すべてのジョブがノード 1 で実行されることがわかります

    bin/ggstart.sh examples/config/example-compute.xml

4

1 に答える 1

0

問題は、現在タスクが map ステップ中にそのノード トポロジを定義していることです。タスクのマッピング手順が完了した後に新しいノードを追加する場合、新しいノードはタスク トポロジに含まれません。それがジョブ・スティールに参加しない理由です。

新しいノードが開始された後にさらにタスクを追加し始めると、すぐにジョブ スチールに参加し始めるはずです。

そうは言っても、タスク トポロジを動的にすることは可能であるため、マッピング ステップの後でもジョブ盗用がジョブを盗む可能性があります。GridGain は、将来のリリースでそれを実装します。

于 2014-08-15T14:55:49.087 に答える