首页 > 解决方案 > 使用 Spark 集群通过不可靠的 Java 应用程序有效地运行排队处理

问题描述

我有以下设置:

  1. “要计算的东西”的网络源/队列(其中“东西”只是指向需要处理的实际数据的指针)
  2. Java/Kotlin 应用程序为“事物”读取数据,为单个“要计算的事物”进行计算,并将数据写入相同的网络源,全部在内部进行。通过写入结果,“要计算的东西”被认为由网络源完成并从队列中删除。
  3. 具有免费资源的 Apache Spark 集群(v2.4.6,2 个工作人员)。

注意事项:

我当前的解决方案有效,但使用资源的效率非常低(工作人员的资源通常被锁定但没有被积极使用),以至于在单台机器上运行会更好。

火花作业的当前实现:

while(true) {
  val rdd = ctx.parallelize(networkGrabFirstThingToDoForEachGroup(limit = 100))

  rdd.foreachPartition { things =>
    things.foreach { thing =>
      informNetworkSourceOfProcessingAttempt(thing) // increments attemptsCount for the thing,
      // which determines if and when the thing will reappear in the queue for another try 
      
      tryProcessingCatchingAndLoggingAnyErrors(thing)
    }
}

标签: javascalaapache-sparkrpc

解决方案


推荐阅读