集中批处理作业&分配数据负载

时间:2017-01-11 11:32:21

标签: cluster-computing

我有批处理项目,希望在5台机器上集群。 假设我输入源是具有1000条记录的数据库。 我想平均分割这些记录,即200个记录/批处理作业实例。

我们如何分配工作量?

1 个答案:

答案 0 :(得分:0)

如下所示,是您可能想要遵循的工作流程。

<强>假设:

  1. 您拥有与数据库表相对应的必要域对象。
  2. 您配置了批处理流程,其中有一个 读/写器/ tasklet机制。
  3. 您有一个消息系统(消息队列是一个很好的方式 使分布式应用程序相互通信)
  4. 输入对象是包含该组的队列的对象 输入记录按所需大小分割。
  5. 结果对象是包含已处理的队列的对象 记录或结果值(如果标量)
  6. chunkSize在属性文件中配置。这里200
  7. <强>设计 在应用程序中,

    1. 配置queueReader以从队列中读取
    2. 配置queueWriter以写入队列
    3. 如果使用task / tasklet机制,请配置不同的队列以携带输入/结果对象。
    4. 配置从DB读取的数据库读取器
    5. DBReader中的逻辑

      1. 逐个读取数据库中的记录并保留记录数。如果 (count%chunkSize == 0)然后将所有记录写入inputMessage 对象并将对象写入队列。
      2. queueReader中的逻辑

        1. 逐一阅读消息

        2. 对于每条现有消息,请进行必要的处理。

        3. 创建resultObject

        4. queueWriter中的逻辑

          1. 读取resultObject(通常批处理框架提供了一种方法) 确保作者能够阅读读者的输出

          2. 如果需要任何适用的处理或下游互动,  把它添加到这里。

          3. 将结果对象写入outputQueue。

          4. <强>部署

            打包一次,部署多个实例。为了获得更好的性能,请确保chunkSize较小以实现快速处理。队列由消息传递系统(市场上可用的系统提供监视队列的方法)管理,您可以在其中查看消息流。