在Cloudera的这篇文章中(http://blog.cloudera.com/blog/2014/05/apache-spark-resource-management-and-yarn-app-models/),他们这样说:
应用程序可用于单个批处理作业,具有间隔开的多个作业的交互式会话,或者长期服务器不断满足请求。
我对“Long-Live服务器不断满足请求”感兴趣:我如何配置Spark以便在该模式下工作?我写了一个非常简单的应用程序,它正在侦听Socket端口并在其中执行任务收到订单,但我不确定这是否必须有效。 任何建议,帖子或书籍都会在我的道路上投入一些亮点? :) 谢谢!
我的代码非常简单和天真,但就是这样:
// Before this line is the code in charge of reading the source files and creates the graph
val server = new ServerSocket(9999)
val s = server.accept()
val in = new BufferedSource(s.getInputStream()).getLines()
val out = new PrintStream(s.getOutputStream())
while (true) {
var str = in.next()
if (str =="filtro"){
out.println("Starting Job. Please Wait")
var a = in.next()
graph.vertices.filter{
case(id, (followers_count, lang)) => followers_count > 10000
}.collect.foreach{
case(id, (followers_count,lang)) => out.println(s"$screen_name has $followers_count")
}
out.println("Job Finished")
out.flush()
}
if (str == "filtro2") {
out.println("Starting Job. Please Wait")
var a = in.next()
graph.vertices.filter{
case(id, (followers_count, lang)) => lang == "es"
}.collect.foreach{
case(id, (followers_count, lang)) => out.println(s"$screen_name has $followers_count")
}
out.println("Job Finished")
out.flush()
}
out.println(in.next())
out.flush()
}
s.close()
正如您所看到的,我的原型Scala脚本“正在侦听”,当它收到预期的“订单”时,则执行订单。我很确定这必须以另一种方式完成,但我找不到如何做到这一点。
答案 0 :(得分:0)
听起来你已经在非常简单的套接字监听器应用程序中实现了它,但是如果没有看到任何代码就很难确定。
一般情况下,只要你的SparkContext存在,任何与之关联的RDD都可以存在,所以如果你坚持使用它们,它们将可供进一步使用。
以后的任务可以利用持久化的RDD来避免重做某些工作。