Spark Streaming处理速度滞后于读取速度测试

来源:互联网 发布:淘宝喵喵歌 编辑:程序博客网 时间:2024/05/06 15:28
Java代码  收藏代码
  1.  spark.examples.streaming  
  2.   
  3. 导入 org.apache.spark.SparkConf  
  4. import  org.apache.spark.streaming.StreamingContext._  
  5. 导入 org.apache.spark.streaming._  
  6.   
  7. 对象NetCatStreamingWordCountDelay {  
  8.   def main(args:Array [String]){  
  9.     val conf =  new  SparkConf()。setAppName(“NetCatStreamingWordCountDelay” )  
  10.     conf.setMaster(“local [3]” )  
  11.     //每秒钟接收数据  
  12.     val ssc =  new  StreamingContext(conf,Seconds())  
  13.     val lines = ssc.socketTextStream(“192.168.26.140” ,  9999 )  
  14.     //每个处理应该花费大约4秒钟的时间。  
  15.     lines.foreachRDD(rdd => {  
  16.       println(“即使rdd为空也是输出” )  
  17.       Thread.sleep( *  1000 )  
  18.     })  
  19.     ssc.start()  
  20.     ssc.awaitTermination()  
  21.   }  
  22. }  

上面的测试代码:

1.时间间隔设置为1秒,也就是说,每隔1秒钟,Spark Streaming将创建一个RDD

2.处理的速度是4秒,也就是,处理速度滞后于数据的读取速度

 

2. UI展现



如何解读上面的统计信息:

 

1. Spark Streaming一共运行了1分钟35秒= 95秒

2.一共处理了23个批次,每隔处理的时间4秒多点,因为23个批次总耗时是92秒

3.批次的时间间隔是1秒

等待批次为什么是1?应该是95 / 1-23 = 72个才对

 

我从火花流UI中复制下面的内容,我不知道为什么Waiting批量是1,我的理解是它应该是72. 
以下是我的理解:
1.总时间是1分35秒= 95秒
2.批量间隔为1秒,95秒内产生95个批次。
3.处理过的批次是23(正确,因为在我的处理代码中,它什么都不做,只是睡了4秒)
4.然后等待的批次应该是95-23 = 72

 

Tathagata Das回复:非常好的问题!这是因为当前的代码是这样写的,使得ui认为一个批处理只在实际开始处理时才等待。计算中不考虑在队列中等待的批处理。在等待中计数可能更直观。

 

 

1.处理时间指的是每个批次的耗用时间,统计的时间包括一个批次的处理耗时,批次的最小耗时。以及25%,50%,75%时间段的耗时

2.总延迟:1分10秒如何计算出来的?总共95秒,有23个批出来完(23秒),那么总延时是95-23 = 72秒。

3.调度延迟表示一个批次从入队到出队的延迟,上例中,最后一个批次的延时是1分6秒钟。会不断的累加。

 

3. Spark官方文档解释

除了Spark的监控功能外,Spark Streaming还有其他特定功能。当使用StreamingContext时,Spark Web UI将显示一个附加的Streaming选项卡,其中显示有关正在运行的接收方(接收方是否处于活动状态,接收记录数,接收方错误等)和已完成批次(批处理时间,排队延迟等)的统计信息)。这可以用来监视流应用程序的进度。

Web UI中的以下两个指标尤为重要:

  • 处理时间 - 处理每批数据的时间。
  • 计划延迟 - 批次在队列中等待处理先前批次的时间。

如果批处理时间一直超过批处理间隔和/或排队延迟持续增加,则表示系统无法处理批生产速度快,落后的批次。在这种情况下,考虑减少批处理时间。

Spark Streaming程序的进度也可以使用StreamingListener接口进行监控,该接口允许您获取接收器状态和处理时间。请注意,这是一个开发人员API,将来可能会改进(即报告更多信息)


转载地址:http://bit1129.iteye.com/blog/2198713