spark中,reduce是如何获取map任务的输出?
2019-10-11 本文已影响0人
scott_alpha
首先有mapoutputtrackerMaster,mapoutputTracker用于追踪map阶段任务的输出状态,此状态便于reduce阶段任务获取,地址及中间输出结果,其内部使用mapstatuses:HashMap<key,Array[mapstatus]>,其中key是shuffleid,array维护每个map的状态信息mapstatus,mapstatus维护了map输出block的地址。所以reduce知道如何从map任务中获取数据。
Driver和Executor处理MapOutputTrackerMaster的方式有所不同。如果当前应用程序是Driver,则创建MapOutputTrackerMaster,然后创建MapOutputTrackerMasterActor,并且注册到ActorSystem中。如果当前应用程序是Executor,则创建MapOutputTrackerWorker,并从ActorSystem中找到MapOutputTrackerMasterActor。
无论是Driver还是Executor,最后都由mapOutputTracker的属性trackerActor持有MapOutputTrackerMasterActor的引用。map任务的状态正是由Executor向持有的MapOutputTrackerMasterActor发送消息,将map任务状态同步到mapOutputTracker的mapStatuses。