如何使用Apache Livy和Apache Spark排队REST请求?

时间:2017-08-18 00:36:56

标签: scala rest apache-spark yarn

我有一个远程进程,向我简单的 Spark Standalone Cluster 发送数千个请求:

  • 3个工作节点,4核,8GB
  • 驱动程序运行的主节点相同

托管在Scala中开发的简单数据处理服务。这些请求通过带有一些参数的 cUrl 命令发送到.jar,通过REST Apache Livy接口发送,如下所示:

curl -s -X POST -H "Content-Type: application/json" REMOTE_IP:8998/batches -d '{"file":"file://PATH_TO_JAR/target/MY_JAR-1.0.0-jar-with-dependencies.jar","className":"project.update.MY_JAR","args":["C1:1","C2:2","C3:3"]}'
  • 每次都会触发一个火花作业,
  • 群集的资源调度是动态的,因此一次最多可以提供3个请求,
  • 当工作人员空闲时,会提供另一个排队请求。

在某个时间点,即使请求处于 WAITING 状态(因为Spark注册要提供的作业),请求也会终止主节点内存,挂起主节点并且工作人员松散与它的联系。

有没有办法可以排队这个请求,防止Spark为他们保留RAM?当一个worker空闲时,处理该队列中的另一个请求。

This问题类似,说 yarn.scheduler.capacity.max-applications 只允许N个RUNNING应用程序,但我不明白这是不是我需要的解决方案。 Apache Livy没有这个功能,不是我所知道的。

0 个答案:

没有答案