如何 运行 Spark 应用程序作为守护进程

How to run Spark Application as daemon

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

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

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

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

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

while (true) {
  request = incomingQueue.poll()
  // Process the request with Spark
  val result = ...
  outgoingQueue.put(result)      
}

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

 // Create the request from the REST call
 val request = ...
 incompingQueue.put(request)
 val result = outgoingQueue.poll()
 return result

我见过的这个用例的最佳选择是 Spark Job Server,它将是守护程序应用程序,您的驱动程序代码作为命名应用程序部署到它。

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

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