为什么我的Spark Streaming程序进程如此缓慢?

时间:2017-04-12 01:14:14

标签: json scala apache-spark spark-streaming

我目前正在编写Spark Streaming。我的任务非常简单,只需从kafka接收json消息并进行一些文本过滤(包含TEXT1,TEXT2,TEXT3,TEXT4)。代码如下:

    val messages = KafkaUtils.createDirectStream[String, String, StringDecoder, StringDecoder](
      ssc, kafkaParams, topics)


    messages.foreachRDD { rdd =>

      val originrdd = rdd.count()

      val record = rdd.map(_._2).filter(x=>x.contains(TEXT1)).filter( x=>x.contains(TEXT2)).filter(x=>x.contains(TEXT3)).filter(x=>x.contains(TEXT4))

      val afterrdd = record.count()

      println("original number of record: ", originrdd)
      println("after filtering number of records:", afterrdd)
}

每个JSON消息大约4 kb,每1秒大约50000条来自Kafka的记录。

对于上述任务,每个批次的处理时间需要3秒,因此无法实现实时性能。我有同样的任务风暴,它执行得更快。

1 个答案:

答案 0 :(得分:1)

嗯,你在这个过程中做了3个不必要的RDD。

val record = rdd.map(_._2).filter(x => { 
    x.contains(TEXT1) && 
    x.contains(TEXT2) && 
    x.contains(TEXT3) && 
    x.contains(TEXT4)
}

另外,值得一读。 https://spark.apache.org/docs/latest/streaming-programming-guide.html#performance-tuning