[
https://issues.apache.org/jira/browse/YARN-11153?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17582560#comment-17582560
]
ASF GitHub Bot commented on YARN-11153:
---------------------------------------
slfan1989 commented on code in PR #4314:
URL: https://github.com/apache/hadoop/pull/4314#discussion_r950851516
##########
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-web-proxy/src/main/java/org/apache/hadoop/yarn/server/webproxy/FedAppReportFetcher.java:
##########
@@ -0,0 +1,110 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with this
+ * work for additional information regarding copyright ownership. The ASF
+ * licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
under
+ * the License.
+ */
+
+package org.apache.hadoop.yarn.server.webproxy;
+
+import java.io.IOException;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+import org.apache.commons.lang3.tuple.Pair;
+import org.apache.hadoop.classification.VisibleForTesting;
+import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.ipc.RPC;
+import org.apache.hadoop.yarn.api.ApplicationClientProtocol;
+import org.apache.hadoop.yarn.api.records.ApplicationId;
+import org.apache.hadoop.yarn.client.ClientRMProxy;
+import org.apache.hadoop.yarn.exceptions.YarnException;
+import
org.apache.hadoop.yarn.server.federation.failover.FederationProxyProviderUtil;
+import org.apache.hadoop.yarn.server.federation.store.records.SubClusterId;
+import org.apache.hadoop.yarn.server.federation.store.records.SubClusterInfo;
+import
org.apache.hadoop.yarn.server.federation.utils.FederationStateStoreFacade;
+import org.apache.hadoop.yarn.util.StringHelper;
+import org.apache.hadoop.yarn.webapp.util.WebAppUtils;
+
+public class FedAppReportFetcher extends AppReportFetcher {
+
+ private final Map<SubClusterId, Pair<SubClusterInfo,
ApplicationClientProtocol>> subClusters;
+ private FederationStateStoreFacade federationFacade;
+
+ /**
+ * Create a new Connection to the RM/Application History Server to fetch
+ * Application reports.
+ *
+ * @param conf the conf to use to know where the RM is.
+ */
+ public FedAppReportFetcher(Configuration conf) {
+ super(conf);
+ subClusters = new ConcurrentHashMap<>();
+ federationFacade = FederationStateStoreFacade.getInstance();
+ }
+
+ /**
+ * Get an application report for the specified application id from the RM and
+ * fall back to the Application History Server if not found in RM.
+ *
+ * @param appId id of the application to get.
+ * @return the ApplicationReport for the appId.
+ * @throws YarnException on any error.
+ * @throws IOException connection exception.
+ */
+ @Override
+ public FetchedAppReport getApplicationReport(ApplicationId appId)
+ throws YarnException, IOException {
+ SubClusterId scid = federationFacade.getApplicationHomeSubCluster(appId);
+ createSubclusterIfAbsent(scid);
+ ApplicationClientProtocol applicationsManager =
subClusters.get(scid).getRight();
+
+ return super.getApplicationReport(applicationsManager, appId);
+ }
+
+ @Override
+ public String getRmAppPageUrlBase(ApplicationId appId)
+ throws IOException, YarnException {
+ SubClusterId scid = federationFacade.getApplicationHomeSubCluster(appId);
+ createSubclusterIfAbsent(scid);
+
+ SubClusterInfo subClusterInfo = subClusters.get(scid).getLeft();
+ String scheme = WebAppUtils.getHttpSchemePrefix(getConf());
+ return StringHelper.pjoin(scheme +
subClusterInfo.getRMWebServiceAddress(), "cluster", "app");
+ }
+
+ private void createSubclusterIfAbsent(SubClusterId scId) throws
YarnException, IOException {
+ if (subClusters.containsKey(scId)) {
+ return;
+ }
+ SubClusterInfo subClusterInfo = federationFacade.getSubCluster(scId);
+ Configuration subClusterConf = new Configuration(getConf());
+ FederationProxyProviderUtil
+ .updateConfForFederation(subClusterConf,
subClusterInfo.getSubClusterId().toString());
Review Comment:
Is toString necessary?
> Make proxy server support YARN federation.
> ------------------------------------------
>
> Key: YARN-11153
> URL: https://issues.apache.org/jira/browse/YARN-11153
> Project: Hadoop YARN
> Issue Type: Sub-task
> Components: yarn
> Affects Versions: 3.2.1
> Reporter: zhengchenyu
> Assignee: zhengchenyu
> Priority: Major
> Labels: pull-request-available
> Fix For: 3.4.0
>
> Time Spent: 8h 40m
> Remaining Estimate: 0h
>
> Detail message see: https://issues.apache.org/jira/browse/YARN-10775 and
> YARN-10775-design-doc.001.pdf
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]