网格弹性缩放 - 无法按照我的意愿行事

时间:2014-08-07 10:19:37

标签: gridgain grid-computing

我希望之前有人这样做,或者有人可以建议Gridgain是否支持此功能。

我的用例是:

  1. 使用示例/ config / example-compute.xml修改以支持工作窃取(见下文)
  2. 启动Gridgain节点
  3. 向集群提交300个任务。它们开始在第一个节点上执行,但由于它们需要时间来执行,因此有一长串未完成的任务
  4. 使用相同配置启动新节点并观察其加入群集
  5. 节点2不应该从第一个节点窃取部分工作吗?不幸的是,我们必须等待所有任务在节点1上完成,而节点2什么都不做
  6. 我认为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,这里有详细的说明来运行它:

    1. 运行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

    2. 启动一个新节点,您将看到所有作业都在节点1上执行

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

1 个答案:

答案 0 :(得分:0)

问题是当前任务在映射步骤中定义其节点拓扑。如果在任务完成其映射步骤后添加新节点,则新节点将不在任务拓扑中。这就是为什么它不参与偷工作的原因。

如果您在新节点启动后开始添加更多任务,那么它应该立即开始参与工作窃取。

话虽如此,可以使任务拓扑动态化,因此即使在映射步骤之后,工作窃取也可以窃取作业。 GridGain将在未来版本中实现它。