在Spark中运行现有的生产型Java应用

问题描述 投票:0回答:1

我一直在阅读Spark,对在可扩展计算集群之间分配计算的能力非常感兴趣。 我们有处理AMQP消息处理的生产流处理代码(用Java 9写的5K行),我们想在Spark集群中运行。但是,我觉得我一定是误解了Spark的基本前提。 一方面,它运行的是Java,我们应该能够用它来运行我们的应用程序,但另一方面,似乎(从文档中)所有的代码都必须按照Spark API重写(使用DataframesDatasets)。 这是真的吗? Java应用程序可以原封不动地与Spark一起使用,还是必须重写? 这似乎是一个主要的限制,或者说是我们的一个障碍。

我想,理想情况下,我们会希望使用Spark来处理高级别的消息路由(使用结构化流API),这将把消息交给我们的Java应用来处理计算、数据库写入等。 我们代码的核心部分是单类接口,Spark可以将消息映射到该类实例。 因此,很可能会有很多很多的实例在每个机器实例内和分布在整个集群中并行处理消息。

我是不是在这里遗漏了什么?

java apache-spark spark-streaming
1个回答
1
投票

对于你的问题 Java应用可以原封不动地与Spark一起使用,还是必须重写?

是的,你必须重写数据交互层。

Spark以rdddataframe的形式读取源数据,在你的例子中,它是流式DataframesDatasets。

Spark并行处理job调度是基于这些数据集dataframe

Dataframesdataset相当于一个数组,它在多个节点上存储数据。

所以,如果你在java中有一个逻辑,迭代一个列表,并写入文件

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

在火花中,你必须处理好数据框架的问题

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

希望你能看到区别,你可以重用你的业务逻辑,但火花必须处理数据流,要么读写(推荐)。

© www.soinside.com 2019 - 2024. All rights reserved.