【问题标题】:is spring-batch for me, even though I don't have a usage for itemReader and itemWriter?对我来说是spring-batch,即使我没有使用itemReader和itemWriter?
【发布时间】:2012-01-23 15:24:54
【问题描述】:

spring-batch newbie:我有一系列的批次

  • 从一些 sql 表中读取所有新记录(自上次执行以来)
  • 上传所有新记录到hadoop
  • 所有数据(新旧)运行一系列 map-reduce (pig) 作业
  • 全部输出下载到本地并在所有输出上运行其他一些本地处理

重点是,我没有任何明显的“项目”——我不想与数据中的特定文本行相关,我将所有这些作为一大块处理,不想要任何提交间隔等...

但是,我确实希望将所有这些步骤保持松散耦合 - 例如,步骤 a+b+c 可能会成功几天并累积已处理的内容,而步骤 d 一直失败,然后当它最终成功时,它将读取并处理之前步骤的所有输出。

SO:我的“项目”是一个虚构的“工作项目”,它将表示整个新数据吗?我是否自己维护一系列队列并在它们之间传递这个虚构的工作项?

谢谢!

【问题讨论】:

  • 我真的很喜欢 Spring Batch,我很确定您可以使用它来实现您的用例,但我不确定您为什么要使用 Spring Batch? * 你不需要提交行为 * 显然你不需要重启,那么你希望从使用 Spring Batch 中得到什么?
  • 公平的问题:我想在失败时重试,我希望能够从失败的最后一步恢复,并且当一个步骤多次执行而没有下一步运行时(hadoop 集群已关闭)和接下来的步骤终于变得可用(hadoop 已启动)-> 我希望它在多次执行中消耗现在可用的所有块。春批不适合我吗?

标签: java spring batch-processing spring-batch


【解决方案1】:

人们总是认为 Spring Batch 的唯一用途实际上只是用于块处理。这是一个巨大的功能,但被忽视的是处理和作业控制的可见性。

让 5 个人完成相同的任务,而无需使用 Spring Batch,他们将以自己的方式实施流程控制和可见性。给 5 个人相同的任务和 Spring Batch,您最终可能会得到所有不同的自定义小任务,但是访问作业元数据以及启动和停止作业将是一致的。从我的角度来看,它是一个很好的工作管理工具。如果您已经编写好工作,如果您不想重写它们以符合“项目”范式,则可以将它们实现为自定义小任务。您仍然会看到好处。

【讨论】:

    【解决方案2】:

    我没有看到问题。您的场景对我来说似乎是 Spring Batch 的经典应用。

    • 从一些 sql 表中读取所有新记录(自上次执行以来)

    这里,一个项目就是一个记录

    • 将所有新记录上传到 hadoop

    这里也一样

    • 对所有数据(新旧)运行一系列 map-reduce (pig) 作业

    听起来像StepListener or ChunkListener

    • 将所有输出下载到本地并在所有输出上运行其他一些本地处理

    这是下一步。


    我看到的唯一问题是您的记录是否没有域对象。但即便如此,您也可以使用地图或数组,同时仍然使用 ItemReaders 和 ItemWriters。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-18
      • 2021-07-31
      • 2021-07-15
      • 1970-01-01
      相关资源
      最近更新 更多