YARN-5226. Remove AHS enable check from LogsCLI#fetchAMContainerLogs. Contributed by Xuan Gong.
This commit is contained in:
parent
b3018e73cc
commit
3818393297
@ -555,7 +555,10 @@ private int printAMContainerLogs(Configuration conf,
|
|||||||
new ArrayList<ContainerLogsRequest>();
|
new ArrayList<ContainerLogsRequest>();
|
||||||
boolean getAMContainerLists = false;
|
boolean getAMContainerLists = false;
|
||||||
String appId = request.getAppId().toString();
|
String appId = request.getAppId().toString();
|
||||||
String errorMessage = "";
|
StringBuilder errorMessage = new StringBuilder();
|
||||||
|
// We will call RM webservice to get all AppAttempts information.
|
||||||
|
// If we get nothing, we will try to call AHS webservice to get AppAttempts
|
||||||
|
// which includes nodeAddress for the AM Containers.
|
||||||
try {
|
try {
|
||||||
amContainersList = getAMContainerInfoForRMWebService(conf, appId);
|
amContainersList = getAMContainerInfoForRMWebService(conf, appId);
|
||||||
if (amContainersList != null && !amContainersList.isEmpty()) {
|
if (amContainersList != null && !amContainersList.isEmpty()) {
|
||||||
@ -572,8 +575,13 @@ private int printAMContainerLogs(Configuration conf,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
errorMessage = ex.getMessage();
|
errorMessage.append(ex.getMessage() + "\n");
|
||||||
if (request.isAppFinished()) {
|
if (request.isAppFinished()) {
|
||||||
|
if (!conf.getBoolean(YarnConfiguration.TIMELINE_SERVICE_ENABLED,
|
||||||
|
YarnConfiguration.DEFAULT_TIMELINE_SERVICE_ENABLED)) {
|
||||||
|
errorMessage.append("Please enable the timeline service "
|
||||||
|
+ "and make sure the timeline server is running.");
|
||||||
|
} else {
|
||||||
try {
|
try {
|
||||||
amContainersList = getAMContainerInfoForAHSWebService(conf, appId);
|
amContainersList = getAMContainerInfoForAHSWebService(conf, appId);
|
||||||
if (amContainersList != null && !amContainersList.isEmpty()) {
|
if (amContainersList != null && !amContainersList.isEmpty()) {
|
||||||
@ -581,12 +589,14 @@ private int printAMContainerLogs(Configuration conf,
|
|||||||
for (JSONObject amContainer : amContainersList) {
|
for (JSONObject amContainer : amContainersList) {
|
||||||
ContainerLogsRequest amRequest = new ContainerLogsRequest(
|
ContainerLogsRequest amRequest = new ContainerLogsRequest(
|
||||||
request);
|
request);
|
||||||
amRequest.setContainerId(amContainer.getString("amContainerId"));
|
amRequest.setContainerId(
|
||||||
|
amContainer.getString("amContainerId"));
|
||||||
requests.add(amRequest);
|
requests.add(amRequest);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
errorMessage = e.getMessage();
|
errorMessage.append(e.getMessage());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -595,6 +605,9 @@ private int printAMContainerLogs(Configuration conf,
|
|||||||
System.err.println("Unable to get AM container informations "
|
System.err.println("Unable to get AM container informations "
|
||||||
+ "for the application:" + appId);
|
+ "for the application:" + appId);
|
||||||
System.err.println(errorMessage);
|
System.err.println(errorMessage);
|
||||||
|
System.err.println("Can not get AMContainers logs for "
|
||||||
|
+ "the application:" + appId + " with the appOwner:"
|
||||||
|
+ request.getAppOwner());
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -635,19 +648,12 @@ private void outputAMContainerLogs(ContainerLogsRequest request,
|
|||||||
|
|
||||||
if (request.isAppFinished()) {
|
if (request.isAppFinished()) {
|
||||||
if (containerId != null && !containerId.isEmpty()) {
|
if (containerId != null && !containerId.isEmpty()) {
|
||||||
if (nodeId == null || nodeId.isEmpty()) {
|
|
||||||
try {
|
|
||||||
nodeId =
|
|
||||||
getContainerReport(containerId).getAssignedNode().toString();
|
|
||||||
request.setNodeId(nodeId);
|
|
||||||
} catch (Exception ex) {
|
|
||||||
System.err.println(ex);
|
|
||||||
nodeId = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (nodeId != null && !nodeId.isEmpty()) {
|
if (nodeId != null && !nodeId.isEmpty()) {
|
||||||
printContainerLogsForFinishedApplication(request,
|
printContainerLogsForFinishedApplication(request,
|
||||||
logCliHelper);
|
logCliHelper);
|
||||||
|
} else {
|
||||||
|
printContainerLogsForFinishedApplicationWithoutNodeId(
|
||||||
|
request, logCliHelper);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@ -825,39 +831,8 @@ private List<String> parseAMContainer(CommandLine commandLine,
|
|||||||
private int fetchAMContainerLogs(ContainerLogsRequest request,
|
private int fetchAMContainerLogs(ContainerLogsRequest request,
|
||||||
List<String> amContainersList, LogCLIHelpers logCliHelper)
|
List<String> amContainersList, LogCLIHelpers logCliHelper)
|
||||||
throws Exception {
|
throws Exception {
|
||||||
|
|
||||||
// If the application is running, we will call the RM WebService
|
|
||||||
// to get the AppAttempts which includes the nodeHttpAddress
|
|
||||||
// and containerId for all the AM Containers.
|
|
||||||
// After that, we will call NodeManager webService to get the
|
|
||||||
// related logs
|
|
||||||
if (!request.isAppFinished()) {
|
|
||||||
return printAMContainerLogs(getConf(), request, amContainersList,
|
return printAMContainerLogs(getConf(), request, amContainersList,
|
||||||
logCliHelper);
|
logCliHelper);
|
||||||
} else {
|
|
||||||
// If the application is in the final state, we will call RM webservice
|
|
||||||
// to get all AppAttempts information first. If we get nothing,
|
|
||||||
// we will try to call AHS webservice to get related AppAttempts
|
|
||||||
// which includes nodeAddress for the AM Containers.
|
|
||||||
// After that, we will use nodeAddress and containerId
|
|
||||||
// to get logs from HDFS directly.
|
|
||||||
if (getConf().getBoolean(YarnConfiguration.APPLICATION_HISTORY_ENABLED,
|
|
||||||
YarnConfiguration.DEFAULT_APPLICATION_HISTORY_ENABLED)) {
|
|
||||||
return printAMContainerLogs(getConf(), request, amContainersList,
|
|
||||||
logCliHelper);
|
|
||||||
} else {
|
|
||||||
ApplicationId appId = request.getAppId();
|
|
||||||
String appOwner = request.getAppOwner();
|
|
||||||
System.err.println("Can not get AMContainers logs for "
|
|
||||||
+ "the application:" + appId + " with the appOwner:" + appOwner);
|
|
||||||
System.err.println("This application:" + appId + " has finished."
|
|
||||||
+ " Please enable the application-history service or explicitly"
|
|
||||||
+ " use 'yarn logs -applicationId <appId> "
|
|
||||||
+ "-containerId <containerId> --nodeAddress <nodeHttpAddress>' "
|
|
||||||
+ "to get the container logs.");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private int fetchContainerLogs(ContainerLogsRequest request,
|
private int fetchContainerLogs(ContainerLogsRequest request,
|
||||||
@ -868,13 +843,18 @@ private int fetchContainerLogs(ContainerLogsRequest request,
|
|||||||
String nodeAddress = request.getNodeId();
|
String nodeAddress = request.getNodeId();
|
||||||
String appOwner = request.getAppOwner();
|
String appOwner = request.getAppOwner();
|
||||||
boolean isAppFinished = request.isAppFinished();
|
boolean isAppFinished = request.isAppFinished();
|
||||||
// if we provide the node address and the application is in the final
|
// if the application is in the final state,
|
||||||
// state, we could directly get logs from HDFS.
|
// we could directly get logs from HDFS.
|
||||||
if (nodeAddress != null && isAppFinished) {
|
if (isAppFinished) {
|
||||||
// if user specified "ALL" as the logFiles param, pass empty list
|
// if user specified "ALL" as the logFiles param, pass empty list
|
||||||
// to logCliHelper so that it fetches all the logs
|
// to logCliHelper so that it fetches all the logs
|
||||||
|
if (nodeAddress != null && !nodeAddress.isEmpty()) {
|
||||||
return printContainerLogsForFinishedApplication(
|
return printContainerLogsForFinishedApplication(
|
||||||
request, logCliHelper);
|
request, logCliHelper);
|
||||||
|
} else {
|
||||||
|
return printContainerLogsForFinishedApplicationWithoutNodeId(
|
||||||
|
request, logCliHelper);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
String nodeHttpAddress = null;
|
String nodeHttpAddress = null;
|
||||||
String nodeId = null;
|
String nodeId = null;
|
||||||
|
Loading…
Reference in New Issue
Block a user