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 9377250..0ea6b00 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; @@ -489,11 +491,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) @@ -504,7 +508,17 @@ 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.getClientResponseStatus().equals( + ClientResponse.Status.OK)) { + 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); + } StringBuilder sb = new StringBuilder(); sb.append("End of LogType:" + logFile + "."); if (request.getContainerState() == ContainerState.RUNNING) { @@ -519,6 +533,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