diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/cli/LogsCLI.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/cli/LogsCLI.java index 908d379..1db7886 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/cli/LogsCLI.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/cli/LogsCLI.java @@ -20,6 +20,7 @@ import java.io.File; import java.io.IOException; +import java.io.InputStream; import java.io.PrintStream; import java.util.ArrayList; import java.util.Arrays; @@ -41,6 +42,7 @@ import org.apache.commons.cli.Option; import org.apache.commons.cli.Options; import org.apache.commons.cli.ParseException; +import org.apache.commons.io.IOUtils; import org.apache.commons.lang.StringUtils; import org.apache.hadoop.classification.InterfaceAudience.Private; import org.apache.hadoop.classification.InterfaceAudience.Public; @@ -487,11 +489,13 @@ public int printContainerLogsFromRunningApplication(Configuration conf, out.println(containerString); out.println(StringUtils.repeat("=", containerString.length())); boolean foundAnyLogs = false; + byte[] buffer = new byte[65536]; for (String logFile : newOptions.getLogTypes()) { out.println("LogType:" + logFile); out.println("Log Upload Time:" + Times.format(System.currentTimeMillis())); out.println("Log Contents:"); + InputStream is = null; try { WebResource webResource = webServiceClient.resource(WebAppUtils.getHttpSchemePrefix(conf) @@ -502,7 +506,23 @@ public int printContainerLogsFromRunningApplication(Configuration conf, .path(logFile) .queryParam("size", Long.toString(request.getBytes())) .accept(MediaType.TEXT_PLAIN).get(ClientResponse.class); - out.println(response.getEntity(String.class)); + if (response != null && response.getStatusInfo().getStatusCode() == + ClientResponse.Status.OK.getStatusCode()) { + is = response.getEntityInputStream(); + int len = 0; + while((len = is.read(buffer)) != -1) { + out.write(buffer, 0, len); + } + out.println(); + } else { + out.println("Can not get any logs for the log file: " + logFile); + String msg = "Response from the NodeManager:" + nodeId + + " WebService is " + ((response == null) ? "null": + "not successful," + " HTTP error code: " + + response.getStatus() + ", Server response:\n" + + response.getEntity(String.class)); + out.println(msg); + } StringBuilder sb = new StringBuilder(); sb.append("End of LogType:" + logFile + "."); if (request.getContainerState() == ContainerState.RUNNING) { @@ -517,6 +537,8 @@ public int printContainerLogsFromRunningApplication(Configuration conf, System.err.println("Can not find the log file:" + logFile + " for the container:" + containerIdStr + " in NodeManager:" + nodeId); + } finally { + IOUtils.closeQuietly(is); } } // for the case, we have already uploaded partial logs in HDFS