一.什么是shuffle
MapOutputTrancker用于跟踪map任务的输出状态,此状态便于reduce任务定位到map输出结果所在的节点地址,进而获取中间输出结果,每个map任务或者reduce任务,都会有其唯一的标识,分别为mapid和reduceid,每个reduce任务的输入可能是多个map任务的输出,因为reduce可能会到多个map任务所在的节点上去拉取Block,这一过程叫做shuffle,每次shuffle的过程都有其唯一的标识shuffleid.
二.MapOutputTrancker的创建方式
在Driver端和Executor端启动的同时,都会创建MapOutputTrancker的实例,不同的是Driver端创建的是MapOutputTranckerMaster,Executor端创建的是MapOutputTranckerWoker。
Driver端启动时会创建MapOutputTranckerMaster,之后创建MapOutputTranckerMasterEndpoint,并且注册到Dispatcher中,端点名称为MapOutputTrancker。
Executor端创建MapOutputTranckerWorker,不仅会和Driver端一样,注册端点信息等,而且会从远端Driver获取之前在NettyRpcEnv的Dispatcher中注册好的MapOutputTranckerMasterEndpoint的引用。
三.MapOutputTrancker的属性
- trackerEndpoint:持有Driver端上MapOutputTranckerMasterEndpoint的引用Ref
- mapStatuses:用于维护各个map任务输出的状态,类型为Map[Int,Array[MapStatus]],key为shuffleid,Array存储着各

MapOutputTracker是Spark中跟踪map任务输出状态的关键组件,它帮助reduce任务找到map输出的位置。在Driver和Executor端分别创建MapOutputTrackerMaster和MapOutputTrackerWorker,维护shuffle的mapStatuses,用于定位数据。获取mapStatus的流程包括从本地缓存或Driver端获取,处理并发获取时的锁机制,以及在ShuffleReader中使用mapStatus来拉取Block块数据。
最低0.47元/天 解锁文章
4580

被折叠的 条评论
为什么被折叠?



