Scala 约1分钟后,Spark Streaming停止且无错误

Scala 约1分钟后,Spark Streaming停止且无错误,scala,apache-kafka,spark-streaming,Scala,Apache Kafka,Spark Streaming,当我对Spart流媒体作业执行spark submit时,我可以看到它在大约1分钟内运行,然后它以最终状态Successed停止: 16/11/16 18:58:16 INFO yarn.Client: Application report for application_XXXX_XXX (state: RUNNING) 16/11/16 18:58:17 INFO yarn.Client: Application report for application_XXXX_XXX (state:

当我对Spart流媒体作业执行
spark submit
时,我可以看到它在大约1分钟内运行,然后它以最终状态
Successed
停止:

16/11/16 18:58:16 INFO yarn.Client: Application report for application_XXXX_XXX (state: RUNNING)
16/11/16 18:58:17 INFO yarn.Client: Application report for application_XXXX_XXX (state: FINISHED)
我不明白为什么它会停止,而我希望它会运行一段未定义的时间,并由从Kafka队列接收到的消息触发。在日志中,我可以看到所有的
println
输出,并且没有错误

这是代码的简短摘录:

val conf = new SparkConf().setAppName("MYTEST")
val sc = new SparkContext(conf)
sc.setCheckpointDir("~/checkpointDir")

val ssc = new StreamingContext(sc, Seconds(batch_interval_seconds))

val rootLogger = Logger.getRootLogger()
rootLogger.setLevel(Level.ERROR)

println("Dividing the topic into partitions.")
val inputKafkaTopicMap = inputKafkaTopic.split(",").map((_, kafkaNumThreads)).toMap
val messages = KafkaUtils.createStream(ssc, zkQuorum, group, inputKafkaTopicMap).map(_._2)

messages.foreachRDD(msg => {
  msg.foreach(s => {
    if (s != null) {
      //val result = ... processing goes here
      //println(result)
    }
  })
})

// Start the streaming context in the background.
ssc.start()
这是我的
spark submit
命令:

/usr/bin/spark-submit --master yarn --deploy-mode cluster --driver-memory 10g --executor-memory 10g --num-executors 2 --conf "spark.executor.extraJavaOptions=-XX:+UseG1GC \
-XX:+AlwaysPreTouch" --class org.test.StreamingRunner test.jar param1 param2

当我打开资源管理器时,我看到没有作业
正在运行
,spark streaming作业被标记为
已完成
您的代码缺少对
ssc的调用。等待终止
以阻止驱动程序线程


不幸的是,从控制台上的
map
函数内部无法轻松查看打印输出,因为这些函数调用发生在执行器内部。Cloudera Manager提供了一个不错的日志外观,如果您真的需要在驱动程序上收集日志,您可以将它们写入HDFS中的某个位置,然后自己从那里刮取各种日志。如果您想跟踪的信息是纯数字的,您也可以考虑使用.< /p>,我会尝试注释<代码> RooLogLog.Stvel(Sale.Error)< /C> >以获得更详细的输出。很可能任何杀死你工作的东西都没有被标记为
错误
,因此它被从日志中过滤出来。另外,您似乎错过了对ssc的呼叫。代码结尾处的。@EricM:好的,谢谢。让我在没有这行代码的情况下测试它。几分钟后我会告诉你结果。@EricM:我试着用
ssc运行它,但还是出现了同样的问题。但无论如何,让我再检查一遍。@EricM:你说得对。这个问题是因为缺少
ssc.ssc
。我不知怎么地把它和ssc.waitingterminationortimeout混为一谈了。谢谢。@EricM:如果你能公布答案让我接受,我将不胜感激。顺便问一下,您知道如何在终端中启用Spark流式打印输出,以便我可以看到代码的消息,而不是
应用程序的应用程序报告\u XXXX\u XXX…