码迷,mamicode.com
首页 > 其他好文 > 详细

Spark Streaming源码解读之State管理之UpdataStateByKey和MapWithState解密

时间:2016-05-30 14:16:46      阅读:241      评论:0      收藏:0      [点我收藏+]

标签:

本期内容 :

  • UpdateStateByKey解密
  • MapWithState解密

  

  Spark Streaming是实现State状态管理因素:

  01、 Spark Streaming是按照整个BachDuration划分Job的,每个BachDuration都会产生一个Job,为了符合业务操作的需求,

    需要计算过去一个小时或者一周的数据,但是由于数据量大于BachDuration,此时不可避免的需要进行状态维护

  02、 Spark 的状态管理其实有很多函数,比较典型的有类似的UpdateStateByKey、MapWithState方法来完成核心的步骤

  

一、 UPdateStateByKey :

  在已有历史数据中的状态进行更新,具体怎么更新就取决于UPdateFunc函数进行操作,返回一个DSteam类型

  技术分享

  技术分享

  技术分享

  最终还是使用DSteam操作的,会不断的产生数据

    技术分享

  生成RDD的过程,计算方法

    技术分享

  对传入的数据,通过K对所有数据进行集合:

    优点: 每次都需要对RDD进行计算,确实需要对RDD进行计算,RDD怎么算,就对其进行Cogroup

    缺点: 性能问题,因为需要每一次都要对所有数据进行扫描,最终变成CogroupedRDD,随着数据量的增加速度也越慢

  技术分享

技术分享

  

二、 MapWithState :

技术分享

 

     返回的是DStreams的时候,进行状态更新与维护历史状态是基于K进行的,具体更新的函数、超时时间、初始状态等都是由StateSpec(封装了更新函数)进行获取、

  更新、删除,相当于记录在一张表中,对表中的哪个Key进行操作使用历史数据,State是表名称或者索引,获取、更新数据,维护状态。

  技术分享

  技术分享

  技术分享

  技术分享

  所有的Partition都是由MapWithStateRDDRecord所代表的,数据结构是StateMap ,维护的是基于K的状态

  技术分享

  技术分享

  技术分享

  技术分享

 

 

    备注:

    • 资料来源于:王家林(Spark发行版本定制)
    • 新浪微博:http://www.weibo.com/ilovepains

 

Spark Streaming源码解读之State管理之UpdataStateByKey和MapWithState解密

标签:

原文地址:http://www.cnblogs.com/yinpin2011/p/5539708.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!