Spark Streaming Receiver在YARN上特别慢

时间:2015-02-06 16:29:51

标签: scala apache-spark yarn spark-streaming

以下Spark Streaming代码生成DStream[Int],其中包含随机整数流。

// these lines can be copy-pasted to `spark-shell`
import org.apache.spark.streaming._
import org.apache.spark.storage.StorageLevel
import org.apache.spark.streaming.receiver.Receiver

import scala.util.Random

val ssc = new StreamingContext(sc, Duration(1000))

val numbers = ssc.receiverStream(new Receiver[Int](StorageLevel.MEMORY_ONLY) {
  lazy val thread = new Thread() {
    override def run(): Unit = {
      while(!isInterrupted) {
        store(Random.nextInt())
        Thread.sleep(100)
      }
    }
  }

  override def onStart(): Unit = thread.start()
  override def onStop(): Unit = thread.interrupt()
})

numbers.print()

ssc.start()

在本地模式或独立群集模式下,此代码完全按预期工作,延迟小于50毫秒。但是,在YARN上(使用HADOOP_CONF_DIR=/etc/hadoop/conf spark-shell --master yarn-client运行),延迟随时间线性增加,使得流应用程序无法使用,如下所示:

Spark UI

每秒应该输出print(),但是在YARN上,输出大约每5秒产生一次,使线性延迟增加。

我在纱线2.5.0-cdh5.3.0上运行spark 1.2.0,它分配了2个执行器,每个执行器-Xmx1024m。如果有人感兴趣,these是stdout日志。

是否有人知道这个问题或有任何线索?提前谢谢。

0 个答案:

没有答案