Yarn ApplicationMaster启动过程


发布于 2024-08-17 / 45 阅读 / 0 评论 /
基于hadoop3.3.4源码,探索Yarn任务提交中ApplicationMaster启动过程

ApplicationMaster是Yarn任务执行过程中的一个重要角色,其启动过程中重要的机制和状态机变化如下图所示:

可以分为以下17个过程。

1.ClientRMService.submitApplication

客户端通过RPC接口——ApplicationClientProtocol.submitApplication——来提交任务,对应的RPC Server端在ResourceManager,由ClientRMService进行处理。

首先是用户提交任务,伪代码如下:

# 第一步:客户端创建Application
YarnClient.createApplication
	// 客户端向ResourceManager申请Application,请求成功后applicationId已确认
	ApplicationClientProtocol.getNewApplication(GetNewApplicationRequest)
	// ResourceManager端为ClientRMService,调用接口为ClientRMService.getNewApplication

# 第二步:提交Application
YarnClient.submitApplication
	// 提交任务到ResourceManager
	ApplicationClientProtocol.submitApplication
	// 最后通过调用ClientRMService.submitApplication进行处理

ClientRMService.submitApplication中,最重要的逻辑就是调用RMAppManager.submitApplication方法进行处理。

2.RMAppManager.submitApplication

这个方法最重要的逻辑就是:初始化RMApp,生成START事件。

伪代码逻辑如下:

ClientRMService.submitApplication
	RMAppManager.submitApplication
		RMAppImpl application = RMAppManager.createAndPopulateNewRMApp
		发送事件new RMAppEvent(applicationId, RMAppEventType.START)

RMAppImpl是一个状态机,收到事件后,对事件进行处理。

.addTransition(RMAppState.NEW, RMAppState.NEW_SAVING,
    RMAppEventType.START, new RMAppNewlySavingTransition())

RMAppImpl收到START事件后,对事件进行处理,处理逻辑定义在RMAppNewlySavingTransition.transition方法中。