YARN-3249. Add a 'kill application' button to Resource Manager's Web UI. Contributed by Ryu Kobayashi.

This commit is contained in:
Tsuyoshi Ozawa 2015-03-05 19:55:56 +09:00
parent 5e9b8144d5
commit 1b67209612
3 changed files with 44 additions and 0 deletions

View File

@ -94,6 +94,9 @@ Release 2.7.0 - UNRELEASED
YARN-2994. Document work-preserving RM restart. (Jian He via ozawa) YARN-2994. Document work-preserving RM restart. (Jian He via ozawa)
YARN-3249. Add a 'kill application' button to Resource Manager's Web UI.
(Ryu Kobayashi via ozawa)
IMPROVEMENTS IMPROVEMENTS
YARN-3005. [JDK7] Use switch statement for String instead of if-else YARN-3005. [JDK7] Use switch statement for String instead of if-else

View File

@ -184,6 +184,12 @@ public class YarnConfiguration extends Configuration {
public static final boolean DEFAULT_RM_SCHEDULER_USE_PORT_FOR_NODE_NAME = public static final boolean DEFAULT_RM_SCHEDULER_USE_PORT_FOR_NODE_NAME =
false; false;
/** Enable Resource Manager webapp ui actions */
public static final String RM_WEBAPP_UI_ACTIONS_ENABLED =
RM_PREFIX + "webapp.ui-actions.enabled";
public static final boolean DEFAULT_RM_WEBAPP_UI_ACTIONS_ENABLED =
true;
/** Whether the RM should enable Reservation System */ /** Whether the RM should enable Reservation System */
public static final String RM_RESERVATION_SYSTEM_ENABLE = RM_PREFIX public static final String RM_RESERVATION_SYSTEM_ENABLE = RM_PREFIX
+ "reservation-system.enable"; + "reservation-system.enable";

View File

@ -37,6 +37,7 @@ import org.apache.hadoop.yarn.api.records.QueueACL;
import org.apache.hadoop.yarn.api.records.Resource; import org.apache.hadoop.yarn.api.records.Resource;
import org.apache.hadoop.yarn.api.records.ResourceRequest; import org.apache.hadoop.yarn.api.records.ResourceRequest;
import org.apache.hadoop.yarn.api.records.YarnApplicationState; import org.apache.hadoop.yarn.api.records.YarnApplicationState;
import org.apache.hadoop.yarn.conf.YarnConfiguration;
import org.apache.hadoop.yarn.server.resourcemanager.RMContext; import org.apache.hadoop.yarn.server.resourcemanager.RMContext;
import org.apache.hadoop.yarn.server.resourcemanager.ResourceManager; import org.apache.hadoop.yarn.server.resourcemanager.ResourceManager;
import org.apache.hadoop.yarn.server.resourcemanager.rmapp.RMApp; import org.apache.hadoop.yarn.server.resourcemanager.rmapp.RMApp;
@ -62,12 +63,16 @@ public class AppBlock extends HtmlBlock {
private final Configuration conf; private final Configuration conf;
private final ResourceManager rm; private final ResourceManager rm;
private final boolean rmWebAppUIActions;
@Inject @Inject
AppBlock(ResourceManager rm, ViewContext ctx, Configuration conf) { AppBlock(ResourceManager rm, ViewContext ctx, Configuration conf) {
super(ctx); super(ctx);
this.conf = conf; this.conf = conf;
this.rm = rm; this.rm = rm;
this.rmWebAppUIActions =
conf.getBoolean(YarnConfiguration.RM_WEBAPP_UI_ACTIONS_ENABLED,
YarnConfiguration.DEFAULT_RM_WEBAPP_UI_ACTIONS_ENABLED);
} }
@Override @Override
@ -113,6 +118,36 @@ public class AppBlock extends HtmlBlock {
setTitle(join("Application ", aid)); setTitle(join("Application ", aid));
if (rmWebAppUIActions) {
// Application Kill
html.div()
.button()
.$onclick("confirmAction()").b("Kill Application")._()
._();
StringBuilder script = new StringBuilder();
script.append("function confirmAction() {")
.append(" b = confirm(\"Are you sure?\");")
.append(" if (b == true) {")
.append(" $.ajax({")
.append(" type: 'PUT',")
.append(" url: '/ws/v1/cluster/apps/").append(aid).append("/state',")
.append(" contentType: 'application/json',")
.append(" data: '{\"state\":\"KILLED\"}',")
.append(" dataType: 'json'")
.append(" }).done(function(data){")
.append(" setTimeout(function(){")
.append(" location.href = '/cluster/app/").append(aid).append("';")
.append(" }, 1000);")
.append(" }).fail(function(data){")
.append(" console.log(data);")
.append(" });")
.append(" }")
.append("}");
html.script().$type("text/javascript")._(script.toString())._();
}
RMAppMetrics appMerics = rmApp.getRMAppMetrics(); RMAppMetrics appMerics = rmApp.getRMAppMetrics();
// Get attempt metrics and fields, it is possible currentAttempt of RMApp is // Get attempt metrics and fields, it is possible currentAttempt of RMApp is