当前位置:网站首页>Flink Yarn Per Job - 提交应用
Flink Yarn Per Job - 提交应用
2022-08-03 09:01:00 【hyunbar】

YarnClusterDescriptor
private ApplicationReport startAppMaster(
Configuration configuration,
String applicationName,
String yarnClusterEntrypoint,
JobGraph jobGraph,
YarnClient yarnClient,
YarnClientApplication yarnApplication,
ClusterSpecification clusterSpecification) throws Exception {
... ...
yarnClient.submitApplication(appContext);
... ...
}
YarnClientImpl extends YarnClient
public ApplicationId submitApplication(ApplicationSubmissionContext appContext) throws YarnException, IOException {
ApplicationId applicationId = appContext.getApplicationId();
if (applicationId == null) {
throw new ApplicationIdNotProvidedException("ApplicationId is not provided in ApplicationSubmissionContext");
} else {
SubmitApplicationRequest request = (SubmitApplicationRequest)Records.newRecord(SubmitApplicationRequest.class);
request.setApplicationSubmissionContext(appContext);
// 重要
this.rmClient.submitApplication(request);
... ...
}
}

ApplicationClientProtocolPBClientImpl implements ApplicationClientProtocol
public SubmitApplicationResponse submitApplication(SubmitApplicationRequest request) throws YarnException, IOException {
SubmitApplicationRequestProto requestProto = ((SubmitApplicationRequestPBImpl)request).getProto();
try {
return new SubmitApplicationResponsePBImpl(this.proxy.submitApplication((RpcController)null, requestProto));
} catch (ServiceException var4) {
RPCUtil.unwrapAndThrowException(var4);
return null;
}
}
ClientRMService
@Override
public SubmitApplicationResponse submitApplication(
SubmitApplicationRequest request) throws YarnException {
ApplicationSubmissionContext submissionContext = request
.getApplicationSubmissionContext();
ApplicationId applicationId = submissionContext.getApplicationId();
// ApplicationSubmissionContext needs to be validated for safety - only
// those fields that are independent of the RM's configuration will be
// checked here, those that are dependent on RM configuration are validated
// in RMAppManager.
String user = null;
try {
// Safety
// 安全校验
user = UserGroupInformation.getCurrentUser().getShortUserName();
} catch (IOException ie) {
LOG.warn("Unable to get the current user.", ie);
RMAuditLogger.logFailure(user, AuditConstants.SUBMIT_APP_REQUEST,
ie.getMessage(), "ClientRMService",
"Exception in submitting application", applicationId);
throw RPCUtil.getRemoteException(ie);
}
// Check whether app has already been put into rmContext,
// If it is, simply return the response
if (rmContext.getRMApps().get(applicationId) != null) {
LOG.info("This is an earlier submitted application: " + applicationId);
return SubmitApplicationResponse.newInstance();
}
if (submissionContext.getQueue() == null) {
// DEFAULT_QUEUE_NAME = "default"
submissionContext.setQueue(YarnConfiguration.DEFAULT_QUEUE_NAME);
}
if (submissionContext.getApplicationName() == null) {
submissionContext.setApplicationName(
// DEFAULT_APPLICATION_NAME = "N/A"
YarnConfiguration.DEFAULT_APPLICATION_NAME);
}
if (submissionContext.getApplicationType() == null) {
submissionContext
// DEFAULT_APPLICATION_TYPE = "YARN"
.setApplicationType(YarnConfiguration.DEFAULT_APPLICATION_TYPE);
} else {
if (submissionContext.getApplicationType().length() > YarnConfiguration.APPLICATION_TYPE_LENGTH) {
submissionContext.setApplicationType(submissionContext
.getApplicationType().substring(0,
YarnConfiguration.APPLICATION_TYPE_LENGTH));
}
}
try {
// call RMAppManager to submit application directly
// 直接调用 RMAppManager 提交应用
rmAppManager.submitApplication(submissionContext,
System.currentTimeMillis(), user);
LOG.info("Application with id " + applicationId.getId() +
" submitted by user " + user);
RMAuditLogger.logSuccess(user, AuditConstants.SUBMIT_APP_REQUEST,
"ClientRMService", applicationId);
} catch (YarnException e) {
LOG.info("Exception in submitting application with id " +
applicationId.getId(), e);
RMAuditLogger.logFailure(user, AuditConstants.SUBMIT_APP_REQUEST,
e.getMessage(), "ClientRMService",
"Exception in submitting application", applicationId);
throw e;
}
SubmitApplicationResponse response = recordFactory
.newRecordInstance(SubmitApplicationResponse.class);
return response;
}
// call RMAppManager to submit application directly
// 直接调用 RMAppManager 提交应用
rmAppManager.submitApplication(submissionContext,
System.currentTimeMillis(), user);

边栏推荐
猜你喜欢

redis键值出现 xacxedx00x05tx00&的解决方法

Scala parallel collections, parallel concurrency, thread safety issues, ThreadLocal

行业 SaaS 微服务稳定性保障实战

数仓4.0(一)

响应式布局经典范例——巨幅背景大标题

qt使用mysql数据库(自学笔记)

PowerShell:执行 Install-Module 时,不能从 URI 下载

pytorch one-hot 小技巧

MySQL-TCL语言-transaction control language事务控制语言

SQL每日一练(牛客新题库)——第5天:高级查询
随机推荐
进程信息
Batch PNG format can be converted to JPG format
0day_Topsec上网行为管理RCE
uni-app 顶部选项卡吸附效果 demo(整理)
Scala parallel collections, parallel concurrency, thread safety issues, ThreadLocal
AD环境搭建
Alibaba Cloud SMS Sending
【LeetCode】112.路径总和
Network LSTM both short-term and long-term memory
LeetCode第三题(Longest Substring Without Repeating Characters)三部曲之二:编码实现
基于二次型性能指标的燃料电池过氧比RBF-PID控制
MySQL-TCL语言-transaction control language事务控制语言
行业 SaaS 微服务稳定性保障实战
【LeetCode】老虎证券面试-括号嵌套且满足优先级
【字节面试】word2vector输出多少个类别
软体按摩机器人驱动器的设计与仿真
数仓4.0(二)------ 业务数据采集平台
SQL每日一练(牛客新题库)——第5天:高级查询
Gauva的ListenableFuture
dflow入门4——recurse&reuse&conditional