gpt4 book ai didi

Spring Batch 并行处理 - 运行时的文件拆分

转载 作者:行者123 更新时间:2023-12-01 15:14:05 24 4
gpt4 key购买 nike

我有一个简单的 Spring Batch,它可以从文件中读取 100 万条记录并将其打印在控制台上。

现在,我想在 N 个服务器上部署这个批次,比如 N=5。

如何确保所有服务器实例都没有读取相同的记录?

如 - 我如何适本地拆分文件中的记录(100 万/5)以实现优化结果?

请帮助提供代码示例。
谢谢。

最佳答案

正如迈克尔所建议的,您可以使用系统命令拆分文件,然后使用 MultiResourcePartitioner用于并行处理拆分的文件。
我就是这样做的

@Bean
public Partitioner partitioner() {
MultiResourcePartitioner partitioner = new MultiResourcePartitioner();
ClassLoader cl = this.getClass().getClassLoader();
ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(cl);
Resource[] resources = resolver.getResources("file:" + filePath + "/"+"*.csv");
partitioner.setResources(resources);
partitioner.partition(10);
return partitioner;
}

@Bean
public TaskExecutor taskExecutor() {
ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
taskExecutor.setMaxPoolSize(4);
taskExecutor.afterPropertiesSet();
return taskExecutor;
}

@Bean
@Qualifier("masterStep")
public Step masterStep() {
return stepBuilderFactory.get("masterStep")
.partitioner(ProcessDataStep())
.partitioner("ProcessDataStep",partitioner())
.taskExecutor(taskExecutor())
.listener(pcStressStepListener)
.build();
}


@Bean
@Qualifier("processData")
public Step processData() {
return stepBuilderFactory.get("processData")
.<pojo, pojo> chunk(5000)
.reader(reader)
.processor(processor())
.writer(writer)
.build();
}



@Bean(name="reader")
@StepScope
public FlatFileItemReader<pojo> reader(@Value("#{stepExecutionContext['fileName']}") String filename) {

FlatFileItemReader<pojo> reader = new FlatFileItemReader<>();
reader.setResource(new UrlResource(filename));
reader.setLineMapper(new DefaultLineMapper<pojo>() {
{
setLineTokenizer(new DelimitedLineTokenizer() {
{
setNames(FILE HEADER);


}
});
setFieldSetMapper(new BeanWrapperFieldSetMapper<pojo>() {
{
setTargetType(pojo.class);
}
});
}
});
return reader;
}

关于Spring Batch 并行处理 - 运行时的文件拆分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49019656/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com