誰かが以前にこれを行ったことがあることを願っています。または、Gridgain がこの機能をサポートしているかどうかをアドバイスできる人がいれば幸いです。
私のユースケースは次のとおりです。
- ワークスティーリングをサポートするように変更された examples/config/example-compute.xml を使用して、Gridgain ノードを開始します (以下を参照)。
- 300 個のタスクをクラスターに送信します。それらは最初のノードで実行を開始しますが、実行に時間がかかるため、未処理のタスクのキューが長くなります。
- 同じ構成を使用して新しいノードを開始し、クラスターに参加するのを確認します
- ノード 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にあります。実行するための詳細な手順は次のとおりです。
ノードを起動し、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
新しいノードを開始すると、すべてのジョブがノード 1 で実行されることがわかります
bin/ggstart.sh examples/config/example-compute.xml