(版本定制)第14课:Spark Streaming源码解读之State管理之updateStateByKey和mapWithState解密

发布时间:2020-07-30 02:32:05 作者:Spark_2016
来源:网络 阅读:387

本期内容:

    1、updateStateByKey解密

    2、mapWithState解密

背景:
整个Spark Streaming是按照Batch Duractions划分Job的。但是很多时候我们需要算过去的一天甚至一周的数据,这个时候不可避免的要进行状态管理,而Spark Streaming每个Batch Duractions都会产生一个Job,Job里面都是RDD,

所以此时面临的问题就是怎么对状态进行维护?这个时候就需要借助updateStateByKey和mapWithState方法完成核心的步骤。


1、简单看下updateStateByKey源码:

     在DStream中updateStateByKey和mapWithState是通过隐式转换来完成,本身没有这样的方法。

implicit def toPairDStreamFunctions[K, V](stream: DStream[(K, V)])
    (implicit kt: ClassTag[K], vt: ClassTag[V], ord: Ordering[K] = null):
  PairDStreamFunctions[K, V] = {
new PairDStreamFunctions[K, V](stream)
}
[: ClassTag](
    updateFunc: ([]Option[]) => Option[]
  ): DStream[()] = ssc.withScope {
  updateStateByKey(updateFuncdefaultPartitioner())
}

最终会通过StateDStream中的computeUsingPreviousRDD和compute来完成这样的功能,简单的流程图如下:

(版本定制)第14课:Spark Streaming源码解读之State管理之updateStateByKey和mapWithState解密

2、简单看下mapWithState源码

mapWithState是返回MapWithStateDStream对象,维护和更新历史状态都是基于Key,使用一个function对key-value形式的数据进行状态维护

[: ClassTag: ClassTag](
    spec: StateSpec[]
  ): MapWithStateDStream[] = {
MapWithStateDStreamImpl[](
    selfspec.asInstanceOf[StateSpecImpl[]]
  )
}

通过InternalMapWithStateDStream类中的compute来完成,简单的流程图如下:

(版本定制)第14课:Spark Streaming源码解读之State管理之updateStateByKey和mapWithState解密

推荐阅读:
  1. (版本定制)第11课:Spark Streaming源码解读
  2. (版本定制)第10课:Spark Streaming源码解读

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

state spark streaming

上一篇:设计一个类,我们只能生成该类的一个实例。

下一篇:Ruby批量下载音乐

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》