关于Spark应用程序架构:长期服务器

时间:2014-08-07 13:24:13

标签: apache-spark

在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脚本“正在侦听”,当它收到预期的“订单”时,则执行订单。我很确定这必须以另一种方式完成,但我找不到如何做到这一点。

1 个答案:

答案 0 :(得分:0)

听起来你已经在非常简单的套接字监听器应用程序中实现了它,但是如果没有看到任何代码就很难确定。

一般情况下,只要你的SparkContext存在,任何与之关联的RDD都可以存在,所以如果你坚持使用它们,它们将可供进一步使用。

以后的任务可以利用持久化的RDD来避免重做某些工作。