如何将Spark Application作为守护程序运行

How to run Spark Application as daemon

我有一个有关运行spark应用程序的基本问题。

我有一个Java客户端,它将向我发送对驻留在HDFS中的查询数据的请求。

我收到的请求是基于HTTP的REST API,我需要解释该请求并形成Spark SQL查询,并将响应返回给客户端。

我无法理解如何使我的spark应用程序成为等待请求的守护程序,并可以使用预先实例化的SQL上下文执行查询?


在该用例中,我看到的最佳选择是Spark Job Server,它将是守护程序应用程序,驱动程序代码作为命名应用程序部署到该应用程序。

此选项为您提供更多功能,例如持久性。

使用作业服务器,您无需编写自己的守护程序,并且客户端应用程序可以直接向其发送REST请求,这将依次执行spark-submit任务。


您可以让一个线程在无限循环中运行以使用Spark进行计算。

1
2
3
4
5
6
while (true) {
  request = incomingQueue.poll()
  // Process the request with Spark
  val result = ...
  outgoingQueue.put(result)      
}

然后,在处理REST请求的线程中,将请求放入incomingQueue中,并等待outingQueue的结果。

1
2
3
4
5
 // Create the request from the REST call
 val request = ...
 incompingQueue.put(request)
 val result = outgoingQueue.poll()
 return result