Spark通过调用MapOutputTracker的getServerStatues来获取map任务执行的状态信息,其处理步骤如下:
1) 从当前BlockManager的MapOutputTracker中获取MapStatus,若没有就进入第2)步,否则直接到第4)步。
2) 如果获取列表(fetching)中已经存在要取的shuffleId,那么就等待其他线程获取。如果获取列表中不存在要取的shuffleId,那么就将shuffleId放入获取列表。
3) 调用askTracker方法向MapOutputTrackerMasterEndpoint发送GetMapOutputStatuses消息获取map任务的状态信息。
MapOutputTrackerMasterEndpoint接收到GetMapOutputStatuses消息后,将请求的map任务状态信息序列化发送给请求方。请求方接收到map任务状态信息后进行反序列化操作,然后放入本地的mapStatuses中。
4) 调用MapOutputTracker的convertMapStatuses方法将获得MapStatus转换为map任务所在的地址(即BlockManagerId)和map任务输出中分配给当前reduce任务的Block大小。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。