我有一个包含超过1m个xml文件的文件夹和一个单线程步骤,该步骤以相同的方式处理这些xml文件中的每一个(没有连接到数据库或文件之间的任何共同点)。
有没有办法让这一步更加并行,比如使用一系列文件名进行分区,或者将文件拆分到不同的文件夹并使用文件夹名?
据我所知,multiresourcepartitioner无法处理这种情况,因为它
为每个资源创建executioncontext,并将它们标记为{partition0,partition1,…,partitionn}。网格大小将被忽略。
我有一个包含超过1m个xml文件的文件夹和一个单线程步骤,该步骤以相同的方式处理这些xml文件中的每一个(没有连接到数据库或文件之间的任何共同点)。
有没有办法让这一步更加并行,比如使用一系列文件名进行分区,或者将文件拆分到不同的文件夹并使用文件夹名?
据我所知,multiresourcepartitioner无法处理这种情况,因为它
为每个资源创建executioncontext,并将它们标记为{partition0,partition1,…,partitionn}。网格大小将被忽略。
2条答案
按热度按时间9udxz4iz1#
既然已经有了单独的文件,为什么需要分组来提高并发性。如果需要增加并发性,请增加线程数。在线程执行器中。假设您有1000个文件,并且有内存和cpu,您可以将max thread设置为50。因此,一次将处理50个文件。一旦文件被处理,它将采取下一组50个文件。因此执行是并行的。下面是一个例子。
其中app.max\u thread\u num=50
nkcskrwz2#
经过一些修补,最好的结果来自自定义分区器,它基于文件夹创建分区。为了实现这一点,上一步编写了每100kXML文件的文件夹数。
分区器(multiresource partitioner)的代码对如何管理stepexecutions有很大帮助:
执行时间从2小时变为40分钟(!!)使用这个分区器。