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

分区后Spring批处理挂起

吕森
2023-03-14

我正在处理200万记录和网格大小为20的Spring批处理应用程序。对于100200k记录,它工作正常,但200万分区后失败。

分区信息:

{
    partition - 20 = {
        startKey = 1980865.0,
        endKey = 2069192.0,
        partitionSize = 72,
        partitionId = 20,
        partitionRecordCount = 88328
    },
    partition - 10 = {
        st
        artKey = 938305.0,
        endKey = 1042560.0,
        partitionSize = 72,
        partitionId = 10,
        partitionRecordCount = 104256
    },
    partition - 11 = {
        startKey = 1042561.0,
        endKey = 1146816.0,
        partitionSize = 72,
        partitionId = 11,
        partitionRecordCount = 104256
    },
    partition - 12 = {
        startKey = 1146817.0,
        endKey = 1251072.0,
        partitionSize = 72,
        partitionId = 12,
        partitionRecordCount = 104256
    },
    partition - 13 = {
        startKey = 1251073.0,
        endKey = 1355328.0,
        partitionSize = 72,
        partitionId = 13,
        partitionRecordCount = 104256
    },
    par
    tition - 14 = {
        startKey = 1355329.0,
        endKey = 1459584.0,
        partitionSize = 72,
        partitionId = 14,
        partitionRecordCount = 104256
    },
    partition - 15 = {
        startKey = 1459585.0,
        end
        Key = 1563840.0,
        partitionSize = 72,
        partitionId = 15,
        partitionRecordCount = 104256
    },
    partition - 16 = {
        startKey = 1563841.0,
        endKey = 1668096.0,
        partitionSize = 72,
        p
        artitionId = 16,
        partitionRecordCount = 104256
    },
    partition - 17 = {
        startKey = 1668097.0,
        endKey = 1772352.0,
        partitionSize = 72,
        partitionId = 17,
        partitionRecordCoun
        t = 104256
    },
    partition - 18 = {
        startKey = 1772353.0,
        endKey = 1876608.0,
        partitionSize = 72,
        partitionId = 18,
        partitionRecordCount = 104256
    },
    partition - 19 = {
        startKey =
            1876609.0,
        endKey = 1980864.0,
        partitionSize = 72,
        partitionId = 19,
        partitionRecordCount = 104256
    },
    partition - 1 = {
        startKey = 1.0,
        endKey = 104256.0,
        partitionSize
             = 72,
        partitionId = 1,
        partitionRecordCount = 104256
    },
    partition - 2 = {
        startKey = 104257.0,
        endKey = 208512.0,
        partitionSize = 72,
        partitionId = 2,
        partitionRecordCou
        nt = 104256
    },
    partition - 3 = {
        startKey = 208513.0,
        endKey = 312768.0,
        partitionSize = 72,
        partitionId = 3,
        partitionRecordCount = 104256
    },
    partition - 4 = {
        startKey = 3127
            69.0,
        endKey = 417024.0,
        partitionSize = 72,
        partitionId = 4,
        partitionRecordCount = 104256
    },
    partition - 5 = {
        startKey = 417025.0,
        endKey = 521280.0,
        partitionSize = 7
            2,
        partitionId = 5,
        partitionRecordCount = 104256
    },
    partition - 6 = {
        startKey = 521281.0,
        endKey = 625536.0,
        partitionSize = 72,
        partitionId = 6,
        partitionRecordCount
             = 104256
    },
    partition - 7 = {
        startKey = 625537.0,
        endKey = 729792.0,
        partitionSize = 72,
        partitionId = 7,
        partitionRecordCount = 104256
    },
    partition - 8 = {
        startKey = 729793
            .0,
        endKey = 834048.0,
        partitionSize = 72,
        partitionId = 8,
        partitionRecordCount = 104256
    },
    partition - 9 = {
        startKey = 834049.0,
        endKey = 938304.0,
        partitionSize = 72,
        partitionId = 9,
        partitionRecordCount = 104256
    }
}
Total no. of Partitions: 20

它打印的最后一个日志是创建的分区,然后控件永远不会进入writer。对于20万条记录来说,它很困难,所以我增加了连接池的大小,这解决了这个问题,但在200万行中失败了。

没有错误,只是挂在那里。

共有1个答案

马淇
2023-03-14

这可能与db有关。您能否检查应用程序是否能够使用写凭据访问数据库。我确实注意到了这样一个问题,即分区已完成,实际处理挂起。故障排除后,意识到无法写入数据库。db修复后,运行良好。

 类似资料:
  • 我们的应用程序是使用线程大小为4的spring batch step分区实现的。这意味着我们的步骤在4个线程中读取800万条记录,每个线程读取200万条记录。线程在代码的某个点上,基本上应用程序代码中最后一次调用等待的时间比预期的要长,大约40分钟,而不是5到10分钟。

  • 我有一个要求,我想在下面的场景中使用Spring批处理框架。 我有一个在交易日期列上分区的表。我想使用Spring批处理框架的阅读器、处理器和写入器来处理该表的记录。我想做的是根据交易日期创建单独的线程进行读取、写入和处理。假设有4个交易日期,那么我想为单独的交易日期创建4个单独的线程。在每个线程中,阅读器将从该交易日期的表中读取记录,在处理器中丰富记录,然后在写入器中发布/写入。 我是Sprin

  • 我们有一个spring批处理作业,我们试图处理大约1000万条记录。现在,在单线程中执行此操作将非常慢,因为我们必须匹配SLA。 为了提高性能,我们开发了一个POC,其中主步骤是创建分区,每个分区代表一个唯一的prod ID。这可以从500到4500之间的任何地方。在POC中,我们有500个这样唯一的产品ID。现在,每个分区都有一个prod id和一个步骤。所有这一切都很顺利。 我们注意到的是主步

  • 我最近开始使用java配置方式编写spring批处理程序,并使用spring批处理和starter包。我使用了分区的步骤和任务执行器来完成我的工作,我面临的问题是,一旦作业完成,批处理过程就不会停止,它一直在我的eclipse和Linux盒子中运行。我手动找到并终止作业。你能帮个忙吗。当我在没有分区步骤的情况下以单线程的方式运行作业时,这工作很好。 我的作业配置:

  • 我正在实现spring批处理作业,用于使用分区方法处理一个DB表中的数百万条记录,如下所示- > 从分区器中的表中提取唯一的分区代码,并在执行上下文中设置相同的代码。 创建一个包含读取器、处理器和写入器的块步骤,以基于特定分区代码处理记录。 是否可以创建分区/线程来处理像thread1进程1-1000,thread2进程1001-2000等? 如何控制创建的线程数,因为分区代码可以是100个左右,

  • 我试图配置我的第一个多线程作业。我们有大约200,000条记录的主目录,我们需要处理。我想将文件分解为10个文件并处理它们。拆分文件tasklet工作正常 主步骤在我的配置中运行,但从步骤不运行。下面是我的配置。 分割者: MultiResourceItemReader: FlatFileItemWriter: 作业配置: 从属步骤配置: 请告知我做错了什么。我没有看到处理器urlFileItem