Spark流独立应用程序

时间:2019-04-14 16:20:25

标签: apache-spark spark-streaming

我正在学习基于https://spark.apache.org/docs/latest/streaming-programming-guide.html的旧Spark流,即,这是旧的DStream。我在Spark Shell中逐行执行以下命令:

import org.apache.spark.streaming._
val ssc = new StreamingContext(sc, Seconds(5))
val lines = ssc.socketTextStream("localhost", 9999)
val words = lines.flatMap(_.split(" "))
val pairs = words.map(word => (word, 1))
val wordCounts = pairs.reduceByKey(_ + _)
wordCounts.print()
ssc.start()

然后我使用Netcat实用程序将单词发送到localhost:9999。它可以按预期工作,显示字数以及时间戳。到目前为止,一切都很好。

我想将其创建为独立应用程序,如下所示:

import org.apache.spark.SparkContext
import org.apache.spark.SparkConf
import org.apache.spark.streaming._

object StreamingExample {
  def main(args: Array[String]) {
    val conf = new SparkConf().setAppName("Streaming Example").setMaster("local")
    val sc = new SparkContext(conf)
    val ssc = new StreamingContext(sc, Seconds(5))
    val lines = ssc.socketTextStream("localhost", 9999)
    val words = lines.flatMap(_.split(" "))
    val pairs = words.map(word => (word, 1))
    val wordCounts = pairs.reduceByKey(_ + _)
    wordCounts.print()
    ssc.start()
    ssc.awaitTermination()
    sc.stop()
  }
}

当我将其发送到Spark时,它可以工作,并且当我在Netcat控制台中编写内容时,它会写一些INFO日志条目(因此它会收到),它每5秒钟记录一些内容(因此调度程序也可以工作),但是不会显示字数统计和时间戳记。但是,如果我用Ctrl + C中断Spark,则会突然显示很长的日志,以及时间戳和字数。

我希望中断时每5秒显示一次字数统计,而不是最后一次显示,尤其是在我一切都在本地运行的情况下。我的期望不正确吗?为什么会出现这种情况?如何使它连续显示字数统计?

0 个答案:

没有答案