如何 运行 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 任务。
我有一个关于 运行 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 任务。