当前位置: 首页 > 知识库问答 >
问题:

Spring批处理-读取大型平面文件-选择横向缩放?

施驰
2023-03-14

问题:

使用远程分块或分区来水平缩放?

由于数据在平面文件中,远程分块和分区都是不好的选择?

共有1个答案

丁均
2023-03-14

假设“次要处理”不是处理中的瓶颈,那么扩展这种类型的作业的最佳选择是通过分区。这项工作有两个步骤。第一种方法是将大文件拆分为更小的文件。为此,我建议使用SystemCommandTasklet将文件shell到OS,以拆分文件(这通常比通过JVM流式传输整个文件性能更好)。这样做的一个示例如下所示:

<bean id="fileSplittingTasklet" class="org.springframework.batch.core.step.tasklet.SystemCommandTasklet" scope="step">
    <property name="command" value="split -a 5 -l 10000 #{jobParameters['inputFile']} #{jobParameters['stagingDirectory']}"/>
    <property name="timeout" value="60000"/>
    <property name="workingDirectory" value="/tmp/input_temp"/>
</bean>

第二步将是分区步骤。如果文件位于不共享的位置,则使用本地分区。但是,如果生成的文件位于网络共享的某个地方,则可以使用远程分区。在任何一种情况下,都可以使用MultiResourcePartitioner为每个文件生成StepExecution。然后这些将通过从属程序执行(要么在线程上本地运行,要么远程监听某些消息传递中间件)。

在这种方法中需要注意的一点是,从原始文件开始处理记录的顺序将不会得到维护。

 类似资料:
  • 我正在尝试创建一个应用程序,该应用程序使用spring-batch-excel扩展名来读取用户通过web界面上传的Excel文件,以便解析Excel文件中的地址。 当代码运行时,没有错误,但我得到的只是我日志中的以下内容。即使我的处理器和Writer中都有log/syso(它们从未被调用过,我所能想象的是它没有正确读取文件,也没有返回要处理/写入的数据)。是的,这个文件有数据,实际上有几千条记录。

  • 我知道匹配模式解析器,这是Spring批处理提供的。我需要关于如何构造批处理作业的帮助,以便它可以读取循环中的记录类型5和记录类型6。

  • 问题内容: 我有一个平面文件,其中包含339276行文本,大小为62.1 MB。我试图读取所有行,根据我所具有的某些条件解析它们,然后将它们插入数据库。 我最初尝试使用bufio.Scan()循环和bufio.Text()来获取行,但我的缓冲区空间不足。我切换到使用bufio.ReadLine / ReadString / ReadByte(我尝试了每种方法),并且每种方法都有相同的问题。我没有足

  • 我正在使用JpaPagingItemReaderBuilder查询一个DB,结果被插入到另一个DB中。 查询返回的结果没有任何问题,但我得到了一个错误与读取器的返回,在处理器中,您可以检查我的编码和错误下面。 有谁能给我一点启示吗?为什么我不能处理结果?

  • 虽然我知道最好的方法是使用去年夏天发布的闪亮的JSON item reader devs(link),但要将批处理版本更新到最新版本还不可行。这是唯一的限制。 到目前为止,我遵循了这个堆栈答案,但我不认为将作为使用是最佳策略!到目前为止,我只是用下面的代码来理解它: ...然后在项目处理器中简单地解析它,比如: Spring Batch:如何设置FlatItemFileReader以读取JSON文

  • 问题内容: 我有一个使用JDBC的Java应用程序,该应用程序每天在服务器上运行一次,并与也在同一服务器上运行的MySQL数据库(v5.5)进行交互。该应用程序正在查询并遍历表中的 所有 行。 该表目前很小(约5000行),但将无限期地增长。我的服务器内存有限,我不认为应用程序的内存消耗不确定。 如果我在运行查询之前使用过,我不清楚这里发生了什么。例如,如果我使用类似: 这是如何适当控制潜在的大型