Spark-Streaming简介、有状态算子

简介: 

  1. Spark Streaming是微批次处理方式,批处理间隔是Spark Streaming是的核心概念和关键参数。
  2. Spark Streaming需要单独一个节点来接收数据,所以Spark 

有状态算子:

  • window
// windowLength : 窗口长度 – 窗口的持久时间(执行一次持续多少个时间单位)
// slideInterval : 滑动步长 – 窗口操作被执行的间隔(每多少个时间单位执行一次)
 window(windowLength, slideInterval)
  • reduceByKeyAndWindow(reduceFunc: (V, V) => V,  windowDuration: Duration, slideDuration: Duration)
val wordAndOne: DStream[(String, Int)] = words.map((_, 1))
/*
参数1: reduce 计算规则
参数2: 窗口长度
参数3: 窗口滑动步长. 每隔这么长时间计算一次.
 */
val count: DStream[(String, Int)] = 
        wordAndOne.reduceByKeyAndWindow((x: Int, y: Int) => x + y,Seconds(15), Seconds(10))
  •  reduceByKeyAndWindow(reduceFunc: (V, V) => V, invReduceFunc: (V, V) => V, windowDuration: Duration, slideDuration: Duration)

实际当中也不会使用此方法,因为要使用历史数据就需要用到checkpoint,而checkpoint就会产生大量小文件

// 比没有invReduceFunc高效. 会利用旧值来进行计算.
// invReduceFunc: (V, V) => V 窗口移动了, 上一个窗口和新的窗口会有重叠部分, 
// 重叠部分的值可以不 用重复计算了. 第一个参数就是新的值, 第二个参数是旧的值.

val count: DStream[(String, Int)] =
    wordAndOne.reduceByKeyAndWindow((x: Int, y: Int) => x + y,(x: Int, y: Int) => x - y,Seconds(15), Seconds(10))
  • countByWindow(windowLength, slideInterval)

返回一个滑动窗口计数流中的元素的个数。

  •  countByValueAndWindow(windowLength, slideInterval, [numTasks])

对(K,V)对的DStream调用,返回(K,Long)对的新DStream,其中每个key的的对象的v是其在滑动窗口中频率。如上,可配置reduce任务数量。

你可能感兴趣的:(spark,spark)