Spark streaming中几个时间的理解

/ Spark / No comments yet / 60 browses

Spark streaming

在使用spark streaming之前需要了解的几个时间概念

  1. 批处理间隔(batch interval)
  2. 窗口大小(window length)
  3. 滑动间隔(sliding length)

批处理间隔(Batch Interval)

批处理间隔一般在启动spark streaming context的时候指定,众所周知,与storm等流式计算框架不同,spark streaming虽然叫做流式计算,但它的计算模式其实就是把计算任务划分成一个一个小批处理任务。批处理间隔简单来说就是spark streaming接收外部数据源的周期。从以下实例代码可以有一个很直观的理解,spark streaming(ssc)通过spark context(sc)构建

val conf = new SparkConf()
val sc = new SparkContext(conf)
val ssc = new SparkContext(sc, Seconds(10))

以上代码中Seconds(10)为批处理间隔,批处理间隔为10秒。意味着spark streaming每十秒从数据源获取一次数据。

窗口大小(Window Length)

Spark Streaming计算并不一定需要窗口操作,举例:在好友推荐中计算二者成为好友概率时,陆续将成对的用户特征传入spark streaming,每次计算一对用户成为好友的概率并不需要前一时刻传入spark streaming中的其他用户特征,这时就不需要用到窗口操作。那什么时候要用到窗口操作呢?如某在线音乐平台的一个版块:近期热门。在统计近期热门的时候需要用到过去一周或者几天内的所有歌曲的播放量进行排序。这时候就要用到窗口操作。

滑动间隔(Sliding Interval)

窗口大小总是和滑动间隔成对出现的,如上述计算近期热门的例子,假如我们要计算过去24小时最热,那么窗口大小就是24小时,假如我们把滑动间隔设为10分钟并把批处理间隔设为10秒,那么spark streaming将每10秒从数据源获取一次数据每10分钟计算一次过去24小时最热,排行榜就每十分钟更新一次。热门计算代码示例如下

val conf = new SparkConf()
val sc = new SparkContext(conf)
val ssc = new SparkContext(sc, Seconds(10))
val steamData = ssc.fromDataSource(****)
val hot = streamDate.reduceByKeyAndWindow((x,y)=>(x+y), Seconds(24*60*60),Seconds(10*60))

窗口大小和滑动间隔一定是批处理间隔的整数倍

alt 上述例子中batch interval=1, window length=3, sliding interval=2.上图来自spark官方文档