繁体   English   中英

火花流中的性能降低

[英]Slow performance in spark streaming

我在本地(不在集群中)使用Spark Streaming 1.1.0。 我创建了一个简单的应用程序,用于解析数据(约10.000个条目),将其存储在流中,然后对其进行一些转换。 这是代码:

def main(args : Array[String]){

    val master = "local[8]"
    val conf = new SparkConf().setAppName("Tester").setMaster(master)
    val sc = new StreamingContext(conf, Milliseconds(110000))

    val stream = sc.receiverStream(new MyReceiver("localhost", 9999))

    val parsedStream = parse(stream)

    parsedStream.foreachRDD(rdd => 
        println(rdd.first()+"\nRULE STARTS "+System.currentTimeMillis()))

    val result1 = parsedStream
       .filter(entry => entry.symbol.contains("walking") 
       && entry.symbol.contains("true") && entry.symbol.contains("id0"))
       .map(_.time)

    val result2 = parsedStream
       .filter(entry =>
        entry.symbol == "disappear" && entry.symbol.contains("id0"))
       .map(_.time)

    val result3 = result1
      .transformWith(result2, (rdd1, rdd2: RDD[Int]) => rdd1.subtract(rdd2))

    result3.foreachRDD(rdd => 
    println(rdd.first()+"\nRULE ENDS "+System.currentTimeMillis()))

   sc.start()
   sc.awaitTermination()
}

def parse(stream: DStream[String]) = {

    stream.flatMap { line =>
        val entries = line.split("assert").filter(entry => !entry.isEmpty)
        entries.map { tuple =>

            val pattern = """\s*[(](.+)[,]\s*([0-9]+)+\s*[)]\s*[)]\s*[,|\.]\s*""".r

            tuple match {
              case pattern(symbol, time) =>
              new Data(symbol, time.toInt)
            }
         }
    }
}

case class Data (symbol: String, time: Int)

我有110.000毫秒的批处理持续时间,以便一次接收所有数据。 我相信,即使在本地,火花也很快。 在这种情况下,执行规则大约需要3.5秒(在“规则开始”和“规则结束”之间)。 我做错什么了吗,或者这是预期的时间? 任何建议

因此,我在分配工作时使用了大小写匹配,这比我引入json解析器时更能降低性能。 还可以尝试在StreamingContext上调整批处理时间。 这对我来说有很大的不同。 您还有多少本地工人?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM