春季新手:我有一系列批次
重点是,我没有任何明显的"项目" - 我不想与我的数据中的特定文本行相关,我将它作为一个大块工作,并且不需要任何提交间隔等等......
然而,我确实希望保持所有这些步骤松散耦合 - 就像在步骤a + b + c可能会成功几天并累积处理过的东西而步骤d一直失败,然后当它最终成功时它会读取并且处理它之前步骤的所有输出。SO:是我的"项目"一个虚构的"工作项目"这将表示整个新数据?我自己维护一系列队列并在它们之间传递这些虚构的工作项目吗?
谢谢!
答案 0 :(得分:5)
人们总是认为弹簧批次的唯一用途实际上仅用于块处理。这是一个巨大的功能,但忽略的是处理和作业控制的可见性。
给5个人同样的任务,没有弹簧批,他们将以自己的方式实现流量控制和可见性。为5个人提供相同的任务和弹出批处理,您最终可能会以不同方式完成自定义tasklet,但是访问作业元数据以及启动和停止作业将保持一致。从我的角度来看,它是一个很好的工作管理工具。如果你已经编写了你的工作,你可以将它们实现为自定义tasklet,如果你不想重写它们以符合'item'范例。你仍会看到好处。
答案 1 :(得分:2)
我没有看到问题。你的场景看起来像是Spring Batch的经典应用程序。
- 从某些sql表中读取所有新记录(自上次执行以来)
此处,项目是记录
- 将所有新记录上传到hadoop
同样在这里
- 在所有数据(旧的和新的)上运行一系列map-reduce(pig)作业
听起来像StepListener
or ChunkListener
- 将所有输出下载到本地并在所有输出上运行一些其他本地处理
这是下一步。
我看到的唯一问题是你的记录没有域对象。但即使这样,你仍然可以使用地图或数组,同时仍然使用ItemReaders和ItemWriters。