在spark中运行现有的生产java应用程序

o2g1uqev  于 2021-05-27  发布在  Spark
关注(0)|答案(1)|浏览(417)

我一直在读spark,对跨可伸缩计算集群分配计算的能力非常感兴趣。我们有处理amqp消息处理的生产流处理代码(用java9编写的5k行),我们希望在spark集群中运行。
不过,我觉得我一定误解了spark的基本前提。一方面,它运行java,我们应该能够用它运行我们的应用程序,但另一方面(从文档中)似乎所有代码都必须重写到sparkapi(使用dataframes/dataset)。这是真的吗?java应用程序是否可以与spark一起使用,还是必须重写它们?对我们来说,这似乎是一个主要的限制,或者说是一个阻碍。
我认为,理想情况下,我们希望使用spark来处理高级消息路由(使用结构化流api),它将消息传递给java应用程序来处理计算、数据库写入等。我们代码的核心部分是单类接口,spark可以将消息Map到该类示例。因此,可能会有许多示例并行地处理消息,既在每个机器示例中,也分布在集群中。
我是不是漏了什么?

zvokhttg

zvokhttg1#

对于您的问题,java应用程序是否可以与spark一起使用,还是必须重写它们?
是的,你必须重写数据交互层。
spark以rdd/dataframe的形式读取源数据,在您的例子中是它的流Dataframe/数据集。
spark并行处理/作业调度基于这些数据集/Dataframe
dataframes/dataset相当于在多个节点上存储数据的数组。
所以如果java中有一个迭代列表并写入文件的逻辑

conn=openFile(..)
Array[value].foreach{
  value-> {
  updatedValue=/**your business logic on the value**/
  conn.write(updatedValue)
  }
}

在spark中,您必须处理Dataframe

dataframe[value].map{ value->
        updatedValue =/**your business logic on the value**/  <-- reuse your logic here
      }.saveToFile(/**file path**/)

希望您能看到区别,您可以重用您的业务逻辑,但是spark必须处理读/写数据流(推荐)。

相关问题