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

全步跳伞

太叔飞翰
2023-03-14

我有Spring批处理作业,在那里我需要传递作为输入到作业的id的列表,我希望从该列表的id能够传递到一个步骤,可以并行运行所有这些。至于现在,我所完成的是在一个线程池执行器中运行多个作业实例,它执行作业的时间x。这意味着它对所有作业进行单个查询。我们谈论的是超过5000万条记录。这些记录代表了特定日期的时间序列。我需要一个id和batchId按月汇总,并将此信息发送给经纪人。

  • 读者-

你能给我提供什么最佳实践吗?

根据建议,这就是我的分区器的样子;

@Override
public Map<String, ExecutionContext> partition(int gridSize) {
    log.debug("START: Partition");

    Map<String, ExecutionContext> partitionMap = new HashMap<>();
    final AtomicInteger counter = new AtomicInteger(0);
    final AtomicInteger partitionerCounter = new AtomicInteger(0);
    Page<Integer> result = null;
    do {
        result = repository.findDistinctByBatchId(LocalDateTime.parse(batchId, AipForecastService.DEFAULT_DATE_TIME_FORMATTER), Optional.ofNullable(result)
                .map(Page::nextPageable)
                .orElse(PageRequest.of(0, 100000)));
        result
                .stream()
                .collect(Collectors.groupingBy(it -> counter.getAndIncrement() / 100))
                .values()
                .forEach(listOfInstallation -> {
                    ExecutionContext context = new ExecutionContext();
                    context.put("listOfInstallation", listOfInstallation);
                    partitionMap.put("partition" + partitionerCounter.incrementAndGet(), context);
                    log.debug("Adding to the partition map {}, listOfInstallation {}", partitionerCounter.get(), listOfInstallation);
                });
    } while (result.hasNext());

    log.debug("END: Created Partitions for installation job of size:{}", partitionMap.size());
    return partitionMap;
}

共有1个答案

孟英光
2023-03-14

我需要传递作为一个输入的工作列表的id的我希望从该列表的id的能够传递到一个步骤可以运行所有的并行

您可以对该列表进行分区,并使用分区步骤并行处理分区。

你能给我提供什么最佳实践吗?

如果您选择分区步骤路由(在我看来适合您的用例),我建议不要为每个id创建分区(除非您有合理数量的ID)。例如,您可以为每个ID范围创建一个分区,并让每个工作步骤执行您描述的读/处理/写逻辑,这绝对可以并行完成。

希望这能有所帮助。

 类似资料:
  • 问题内容: 我似乎无法在Jenkins中运行构建执行Shell步骤。我过去曾在Windows上与Hudson一起工作,并且能够毫无问题地创建外壳/批处理步骤,但似乎这里缺少一些东西。 这是一个全新的jenkins安装程序,我转到“添加构建步骤”,“执行shell”并在命令中输入“ echo hi”。我运行构建,当我查看控制台输出时,什么也没有发生。 我也尝试过执行一个test.sh文件,该文件也只

  • 背景 1.Pika Replicate pika支持master/slave的复制方式,通过slave端的slaveof命令激发 salve端处理slaveof命令,将当前状态变为slave,改变连接状态 slave的向master发送MetaSync请求,在同步之前确保自身db的拓扑结构和master一致 slave下的每个partition单独的向master端对应的partition发起tr

  • 本文向大家介绍thinkjs之页面跳转同步异步操作,包括了thinkjs之页面跳转同步异步操作的使用技巧和注意事项,需要的朋友参考一下 对于刚入手thinkjs项目的新手来说,时常会犯的一个错误就是“混用”各种代码逻辑,比如:我们经常在做后台管理系统的时候用到的登录框, 其实它原本是有一个路由专门存放自己的代码逻辑,而在点击提交按钮的时候,要达到的效果便是账号密码正确的时候,正常跳转页面,而错误的

  • 我已在centos 7上配置了kubernetes主机,并在另一个节点centos 7上配置了kubernetes节点 在kube Master上运行的服务: Kube-Controller-Manager kube-apiserver Kube-Scheduler ETCD 弗兰菲尔德 在kube节点上运行的服务: null 我不知道这个错误意味着什么,以及如何解决这个问题。请建议。

  • 我已经阅读了spring批处理文档几次,并搜索了一种基于作业参数跳过作业步骤的方法。 我希望能够跳过步骤4,如果希望通过指定在工作Paramaters。 我能找到的唯一相关的问题是如何根据应用程序参数--spring boot java config选择运行哪个spring批处理作业 这似乎表明应该创建两个不同的作业上下文,并在批处理步骤定义之外做出决定。 但是,必须创建4个单独的上下文文件,以便

  • 假设我有以下内容: 然后我这样称呼它: 我省略了并且没有将声明为这一事实是否使它实际上是异步的? 我希望发生的情况是循环会立即完成,因为即使花费了很长时间,也不会被等待,并且会立即返回。 我认为这会导致文件内容在这样调用时被覆盖的问题,但这使我认为代码是以某种方式自动转换为同步代码的(尽管似乎不可能知道何时完成)。 那么,简单地说,从非异步方法调用函数是否会自动使代码同步执行,以及省略和(如在函数