YARN-3249. Add a 'kill application' button to Resource Manager's Web UI. Contributed by Ryu Kobayashi.
This commit is contained in:
parent
5e9b8144d5
commit
1b67209612
|
@ -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
|
||||||
|
|
|
@ -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";
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue