我希望之前有人这样做,或者有人可以建议Gridgain是否支持此功能。
我的用例是:
我认为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类可以在这里找到pastebin:http://pastebin.com/AS8iKqjj,这里有详细的说明来运行它:
运行ComputeSleepExample类,该类启动一个节点并向群集提交300个将休眠5秒的作业
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
答案 0 :(得分:0)
问题是当前任务在映射步骤中定义其节点拓扑。如果在任务完成其映射步骤后添加新节点,则新节点将不在任务拓扑中。这就是为什么它不参与偷工作的原因。
如果您在新节点启动后开始添加更多任务,那么它应该立即开始参与工作窃取。
话虽如此,可以使任务拓扑动态化,因此即使在映射步骤之后,工作窃取也可以窃取作业。 GridGain将在未来版本中实现它。