Spring Batch - gridSize

时间:2017-02-07 22:43:49

标签: spring-batch

我想要一些清晰的图片。

我有2000条记录但是我在master中限制了1000条记录,用于使用带有gridSize = 250的rownum进行分区,并在10台机器上运行5个从属分区。

我假设将创建1000/250 = 4步。

  1. 是否将数据信息发送给4个从设备,使1个从设备空闲?如果是数字 步骤是多于slave java进程的数量,我假设了 数据最终会分布在所有奴隶身上。
  2. 完成所有步骤后,奴隶java进程内存是否正常 释放(当步骤存在时,所有对象都从内存中释放出来)?
  3. 如果所有步骤都已完成1000/250 = 4步骤,则需要处理 剩下1000条记录,如何在没有的情况下启动新的作业实例 调度程序触发了这项工作。

1 个答案:

答案 0 :(得分:0)

由于您没有显示Partitioner代码,我会尽量回答假设。

您不必假设步骤数量(我假设将创建1000/250 = 4个步骤),它将是您在java.util.Map<java.lang.String,ExecutionContext>中创建的条目数量您从partition Partitioner Interface方法返回。

partition方法将gridSize作为参数,由您决定是否使用此参数,如果您决定根据其他参数进行分区(而不是均匀分配计数),那么你可以做到这一点。最终,分区数将是返回映射中的条目数,ExecutionContext中存储的值可用于在读取器中获取数据等。

接下来,您可以通过设置相应的TaskExecutorconcurrencyLimit值来选择要并行启动的步骤数,即您可以在partition中创建100个步骤,但只想启动4个步骤并行步骤,并且可以通过分区器顶部的配置设置很好地实现。

回答#1:正如已经指出的那样,您必须使用在分区程序中创建的ExecutionContext信息在阅读器中对数据进行编码。它不会自动发生。

回答#2:不确定你究竟是什么意思但是,完成后所有内容都会被释放,信息会保存在元数据中。

回答#3:正如已经指出的那样,所有步骤都将为所有数据一次创建。可以通过读取器和配置来控制哪些数据以及并行运行的数据的步骤。

希望它有所帮助!!