(三)spark源码理解之MapOutTracker

来源:互联网 发布:钢结构三维详图软件 编辑:程序博客网 时间:2024/06/01 21:25

                                   

     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