YARN-3301. Fixed the format issue of the new RM attempt web page. Contributed by Xuan Gong
(cherry picked from commit 0d3188fd25
)
This commit is contained in:
parent
f79b1f0190
commit
f8488b5aeb
|
@ -323,6 +323,9 @@ Release 2.7.1 - UNRELEASED
|
||||||
YARN-3544. Got back AM logs link on the RM web UI for a completed app.
|
YARN-3544. Got back AM logs link on the RM web UI for a completed app.
|
||||||
(Xuan Gong via zjshen)
|
(Xuan Gong via zjshen)
|
||||||
|
|
||||||
|
YARN-3301. Fixed the format issue of the new RM attempt web page.
|
||||||
|
(Xuan Gong via jianhe)
|
||||||
|
|
||||||
Release 2.7.0 - 2015-04-20
|
Release 2.7.0 - 2015-04-20
|
||||||
|
|
||||||
INCOMPATIBLE CHANGES
|
INCOMPATIBLE CHANGES
|
||||||
|
|
|
@ -149,6 +149,8 @@ public class AppAttemptBlock extends HtmlBlock {
|
||||||
createAttemptHeadRoomTable(html);
|
createAttemptHeadRoomTable(html);
|
||||||
html._(InfoBlock.class);
|
html._(InfoBlock.class);
|
||||||
|
|
||||||
|
createTablesForAttemptMetrics(html);
|
||||||
|
|
||||||
// Container Table
|
// Container Table
|
||||||
TBODY<TABLE<Hamlet>> tbody =
|
TBODY<TABLE<Hamlet>> tbody =
|
||||||
html.table("#containers").thead().tr().th(".id", "Container ID")
|
html.table("#containers").thead().tr().th(".id", "Container ID")
|
||||||
|
@ -236,4 +238,8 @@ public class AppAttemptBlock extends HtmlBlock {
|
||||||
protected void createAttemptHeadRoomTable(Block html) {
|
protected void createAttemptHeadRoomTable(Block html) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected void createTablesForAttemptMetrics(Block html) {
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -46,10 +46,10 @@ import org.apache.hadoop.yarn.util.resource.Resources;
|
||||||
import org.apache.hadoop.yarn.webapp.hamlet.Hamlet;
|
import org.apache.hadoop.yarn.webapp.hamlet.Hamlet;
|
||||||
import org.apache.hadoop.yarn.webapp.hamlet.Hamlet.DIV;
|
import org.apache.hadoop.yarn.webapp.hamlet.Hamlet.DIV;
|
||||||
import org.apache.hadoop.yarn.webapp.hamlet.Hamlet.TABLE;
|
import org.apache.hadoop.yarn.webapp.hamlet.Hamlet.TABLE;
|
||||||
import org.apache.hadoop.yarn.webapp.hamlet.Hamlet.TBODY;
|
|
||||||
import org.apache.hadoop.yarn.webapp.util.WebAppUtils;
|
import org.apache.hadoop.yarn.webapp.util.WebAppUtils;
|
||||||
import org.apache.hadoop.yarn.webapp.view.InfoBlock;
|
import org.apache.hadoop.yarn.webapp.view.InfoBlock;
|
||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
@ -66,52 +66,67 @@ public class RMAppAttemptBlock extends AppAttemptBlock{
|
||||||
this.conf = conf;
|
this.conf = conf;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void render(Block html) {
|
|
||||||
super.render(html);
|
|
||||||
createContainerLocalityTable(html);
|
|
||||||
createResourceRequestsTable(html);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void createResourceRequestsTable(Block html) {
|
private void createResourceRequestsTable(Block html) {
|
||||||
AppInfo app =
|
AppInfo app =
|
||||||
new AppInfo(rm, rm.getRMContext().getRMApps()
|
new AppInfo(rm, rm.getRMContext().getRMApps()
|
||||||
.get(this.appAttemptId.getApplicationId()), true,
|
.get(this.appAttemptId.getApplicationId()), true,
|
||||||
WebAppUtils.getHttpSchemePrefix(conf));
|
WebAppUtils.getHttpSchemePrefix(conf));
|
||||||
TBODY<TABLE<Hamlet>> tbody =
|
|
||||||
html.table("#ResourceRequests").thead().tr()
|
|
||||||
.th(".priority", "Priority")
|
|
||||||
.th(".resourceName", "ResourceName")
|
|
||||||
.th(".totalResource", "Capability")
|
|
||||||
.th(".numContainers", "NumContainers")
|
|
||||||
.th(".relaxLocality", "RelaxLocality")
|
|
||||||
.th(".nodeLabelExpression", "NodeLabelExpression")._()._().tbody();
|
|
||||||
|
|
||||||
|
List<ResourceRequest> resourceRequests = app.getResourceRequests();
|
||||||
|
if (resourceRequests == null || resourceRequests.isEmpty()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
DIV<Hamlet> div = html.div(_INFO_WRAP);
|
||||||
|
TABLE<DIV<Hamlet>> table =
|
||||||
|
div.h3("Total Outstanding Resource Requests: "
|
||||||
|
+ getTotalResource(resourceRequests)).table(
|
||||||
|
"#ResourceRequests");
|
||||||
|
|
||||||
|
table.tr().
|
||||||
|
th(_TH, "Priority").
|
||||||
|
th(_TH, "ResourceName").
|
||||||
|
th(_TH, "Capability").
|
||||||
|
th(_TH, "NumContainers").
|
||||||
|
th(_TH, "RelaxLocality").
|
||||||
|
th(_TH, "NodeLabelExpression").
|
||||||
|
_();
|
||||||
|
|
||||||
|
boolean odd = false;
|
||||||
|
for (ResourceRequest request : resourceRequests) {
|
||||||
|
if (request.getNumContainers() == 0) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
table.tr((odd = !odd) ? _ODD : _EVEN)
|
||||||
|
.td(String.valueOf(request.getPriority()))
|
||||||
|
.td(request.getResourceName())
|
||||||
|
.td(String.valueOf(request.getCapability()))
|
||||||
|
.td(String.valueOf(request.getNumContainers()))
|
||||||
|
.td(String.valueOf(request.getRelaxLocality()))
|
||||||
|
.td(request.getNodeLabelExpression() == null ? "N/A" : request
|
||||||
|
.getNodeLabelExpression())._();
|
||||||
|
}
|
||||||
|
table._();
|
||||||
|
div._();
|
||||||
|
}
|
||||||
|
|
||||||
|
private Resource getTotalResource(List<ResourceRequest> requests) {
|
||||||
Resource totalResource = Resource.newInstance(0, 0);
|
Resource totalResource = Resource.newInstance(0, 0);
|
||||||
if (app.getResourceRequests() != null) {
|
if (requests == null) {
|
||||||
for (ResourceRequest request : app.getResourceRequests()) {
|
return totalResource;
|
||||||
if (request.getNumContainers() == 0) {
|
}
|
||||||
continue;
|
for (ResourceRequest request : requests) {
|
||||||
}
|
if (request.getNumContainers() == 0) {
|
||||||
|
continue;
|
||||||
tbody.tr()
|
}
|
||||||
.td(String.valueOf(request.getPriority()))
|
if (request.getResourceName().equals(ResourceRequest.ANY)) {
|
||||||
.td(request.getResourceName())
|
Resources.addTo(
|
||||||
.td(String.valueOf(request.getCapability()))
|
totalResource,
|
||||||
.td(String.valueOf(request.getNumContainers()))
|
Resources.multiply(request.getCapability(),
|
||||||
.td(String.valueOf(request.getRelaxLocality()))
|
request.getNumContainers()));
|
||||||
.td(request.getNodeLabelExpression() == null ? "N/A" : request
|
|
||||||
.getNodeLabelExpression())._();
|
|
||||||
if (request.getResourceName().equals(ResourceRequest.ANY)) {
|
|
||||||
Resources.addTo(totalResource,
|
|
||||||
Resources.multiply(request.getCapability(),
|
|
||||||
request.getNumContainers()));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
html.div().$class("totalResourceRequests")
|
return totalResource;
|
||||||
.h3("Total Outstanding Resource Requests: " + totalResource)._();
|
|
||||||
tbody._()._();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void createContainerLocalityTable(Block html) {
|
private void createContainerLocalityTable(Block html) {
|
||||||
|
@ -248,4 +263,10 @@ public class RMAppAttemptBlock extends AppAttemptBlock{
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void createTablesForAttemptMetrics(Block html) {
|
||||||
|
createContainerLocalityTable(html);
|
||||||
|
createResourceRequestsTable(html);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue