(三)spark源码理解之MapOutTracker

                                   

     MapOutTracker主要用来存放shuffle map stage的输出,因为主从节点的MapOutTracker实现机制不一样,所以它是一个抽象类,主要维护和记录map的状态,添加或移除shuffle,以及从节点从主节点上获取相应shuffle的状态

                                      

1.MapOutTrackerMaster

                                           

主节点上的MapOutTracker,继承MapOutTracker,因此也继承MapOutTracker的添加以及移除,更新shuffle等的方法,当然它也可以重写MapOutTracker的这些方法


从上面的截图可知注册(添加)一个shuffle就是在TimeStampedHashMap添加相应的mapStatus

另外简单说下MapOutTrackerWorker即为从节点上的MapOutTracker,它主要完成的就是从主节点上获取map输出结果的信息,其实在一些旧版本的spark中貌似都没有这个变量

 2.TimeStampedHashMap

                                          

主要是用来存放之前提到过的MapStatus对象,其中MapStatus包括shuffleID,块Id(即分区Id)以及压缩后的数据的大小,TimeStampedHashMap对象将存储在TimeStampedHashMap中的mapStatus更新,添加新的mapStatus,移除mapStatus,清空TimeStampedHashMap,获得相应mapStatus的时间戳等等

                                                

该函数返回的是Option[mapStatus],其中的replace函数实现的是更换新值即若状态未发生变化则用相应状态的新时间替换旧时间

这个类意为时间戳HashMap,那从何体现出其时间特性?该类中有个ConcurrentHashMap对象(上述截图中的internalMap即为该对象),这个对象的构造器中有个TimeStampedValue类型,这个类型存储的值就为相应的MapStatus对象,以及时间

3.MetaCleaner

                                                   

MetadataCleaner将存储在TimeStampedHashMap中的MapStatus更换新值或者清空超过一定时间的存储单元,它是通过clearOldValues(threshTime: Long, f: (A, B) => Unit)实现的

这里有一点觉得很奇怪为什么有MapOutTrackerMaster变量了,还要有个TimeStampHashMap,或许可以理解为MapOutTrackerMaster作为外层,TimeStampHashMap作为内层,就相当于一个“盒子”

未完待续。。。。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值