From 27d245ebb3f8a1bcef68f1b3d2d96a2c1f426636 Mon Sep 17 00:00:00 2001 From: prabhujoseph Date: Tue, 26 Nov 2019 00:05:15 +0530 Subject: [PATCH] YARN-9956. Improve connection error message for YARN ApiServerClient. --- .../yarn/service/client/ApiServiceClient.java | 78 ++++++++++++---------- .../hadoop/yarn/client/util/YarnClientUtils.java | 2 +- 2 files changed, 44 insertions(+), 36 deletions(-) diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-api/src/main/java/org/apache/hadoop/yarn/service/client/ApiServiceClient.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-api/src/main/java/org/apache/hadoop/yarn/service/client/ApiServiceClient.java index 834bb03..3c2c3c4 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-api/src/main/java/org/apache/hadoop/yarn/service/client/ApiServiceClient.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-api/src/main/java/org/apache/hadoop/yarn/service/client/ApiServiceClient.java @@ -44,6 +44,7 @@ import org.apache.hadoop.yarn.client.api.AppAdminClient; import org.apache.hadoop.yarn.client.api.YarnClient; import org.apache.hadoop.yarn.client.util.YarnClientUtils; +import org.apache.hadoop.yarn.conf.HAUtil; import org.apache.hadoop.yarn.conf.YarnConfiguration; import org.apache.hadoop.yarn.exceptions.YarnException; import org.apache.hadoop.yarn.service.api.records.Component; @@ -94,7 +95,7 @@ public ApiServiceClient(Configuration c) throws Exception { /** * Calculate Resource Manager address base on working REST API. */ - String getRMWebAddress() { + String getRMWebAddress() throws IOException { Configuration conf = getConfig(); String scheme = "http://"; String path = "/app/v1/services/version"; @@ -105,43 +106,50 @@ String getRMWebAddress() { rmAddress = conf .get("yarn.resourcemanager.webapp.https.address"); } - boolean useKerberos = UserGroupInformation.isSecurityEnabled(); - List rmServers = getRMHAWebAddresses(conf); - for (String host : rmServers) { - try { - Client client = Client.create(); - client.setFollowRedirects(false); - StringBuilder sb = new StringBuilder(); - sb.append(scheme) - .append(host) - .append(path); - if (!useKerberos) { - try { - String username = UserGroupInformation.getCurrentUser().getShortUserName(); - sb.append("?user.name=") - .append(username); - } catch (IOException e) { - LOG.debug("Fail to resolve username: {}", e); + + if (HAUtil.isHAEnabled(conf)) { + boolean useKerberos = UserGroupInformation.isSecurityEnabled(); + List rmServers = getRMHAWebAddresses(conf); + StringBuilder diagnosticsMsg = new StringBuilder(); + for (String host : rmServers) { + try { + Client client = Client.create(); + client.setFollowRedirects(false); + StringBuilder sb = new StringBuilder(); + sb.append(scheme) + .append(host) + .append(path); + if (!useKerberos) { + try { + String username = UserGroupInformation.getCurrentUser() + .getShortUserName(); + sb.append("?user.name=") + .append(username); + } catch (IOException e) { + LOG.debug("Fail to resolve username: {}", e); + } } + Builder builder = client + .resource(sb.toString()).type(MediaType.APPLICATION_JSON); + if (useKerberos) { + String[] server = host.split(":"); + String challenge = YarnClientUtils.generateToken(server[0]); + builder.header(HttpHeaders.AUTHORIZATION, "Negotiate " + + challenge); + LOG.debug("Authorization: Negotiate {}", challenge); + } + ClientResponse test = builder.get(ClientResponse.class); + if (test.getStatus() == 200) { + return scheme + host; + } + } catch (Exception e) { + LOG.info("Fail to connect to: " + host); + LOG.debug("Root cause: ", e); + diagnosticsMsg.append("Error connecting to " + host + + " due to " + e.getMessage() + "\n"); } - Builder builder = client - .resource(sb.toString()).type(MediaType.APPLICATION_JSON); - if (useKerberos) { - String[] server = host.split(":"); - String challenge = YarnClientUtils.generateToken(server[0]); - builder.header(HttpHeaders.AUTHORIZATION, "Negotiate " + - challenge); - LOG.debug("Authorization: Negotiate {}", challenge); - } - ClientResponse test = builder.get(ClientResponse.class); - if (test.getStatus() == 200) { - rmAddress = host; - break; - } - } catch (Exception e) { - LOG.info("Fail to connect to: "+host); - LOG.debug("Root cause: {}", e); } + throw new IOException(diagnosticsMsg.toString()); } return scheme+rmAddress; } diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/util/YarnClientUtils.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/util/YarnClientUtils.java index abed6c6..94b13a0 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/util/YarnClientUtils.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/util/YarnClientUtils.java @@ -247,7 +247,7 @@ public String run() throws Exception { StandardCharsets.US_ASCII); } catch (GSSException | IllegalAccessException | NoSuchFieldException | ClassNotFoundException e) { - LOG.error("Error: {}", e); + LOG.error("Error: ", e); throw new AuthenticationException(e); } } -- 2.7.4 (Apple Git-66)