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.
|
||||
(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
|
||||
|
||||
INCOMPATIBLE CHANGES
|
||||
|
|
|
@ -149,6 +149,8 @@ public class AppAttemptBlock extends HtmlBlock {
|
|||
createAttemptHeadRoomTable(html);
|
||||
html._(InfoBlock.class);
|
||||
|
||||
createTablesForAttemptMetrics(html);
|
||||
|
||||
// Container Table
|
||||
TBODY<TABLE<Hamlet>> tbody =
|
||||
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 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.DIV;
|
||||
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.view.InfoBlock;
|
||||
import com.google.inject.Inject;
|
||||
import java.util.List;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Set;
|
||||
|
@ -66,52 +66,67 @@ public class RMAppAttemptBlock extends AppAttemptBlock{
|
|||
this.conf = conf;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void render(Block html) {
|
||||
super.render(html);
|
||||
createContainerLocalityTable(html);
|
||||
createResourceRequestsTable(html);
|
||||
}
|
||||
|
||||
private void createResourceRequestsTable(Block html) {
|
||||
AppInfo app =
|
||||
new AppInfo(rm, rm.getRMContext().getRMApps()
|
||||
.get(this.appAttemptId.getApplicationId()), true,
|
||||
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);
|
||||
if (app.getResourceRequests() != null) {
|
||||
for (ResourceRequest request : app.getResourceRequests()) {
|
||||
if (request.getNumContainers() == 0) {
|
||||
continue;
|
||||
}
|
||||
|
||||
tbody.tr()
|
||||
.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())._();
|
||||
if (request.getResourceName().equals(ResourceRequest.ANY)) {
|
||||
Resources.addTo(totalResource,
|
||||
Resources.multiply(request.getCapability(),
|
||||
request.getNumContainers()));
|
||||
}
|
||||
if (requests == null) {
|
||||
return totalResource;
|
||||
}
|
||||
for (ResourceRequest request : requests) {
|
||||
if (request.getNumContainers() == 0) {
|
||||
continue;
|
||||
}
|
||||
if (request.getResourceName().equals(ResourceRequest.ANY)) {
|
||||
Resources.addTo(
|
||||
totalResource,
|
||||
Resources.multiply(request.getCapability(),
|
||||
request.getNumContainers()));
|
||||
}
|
||||
}
|
||||
html.div().$class("totalResourceRequests")
|
||||
.h3("Total Outstanding Resource Requests: " + totalResource)._();
|
||||
tbody._()._();
|
||||
return totalResource;
|
||||
}
|
||||
|
||||
private void createContainerLocalityTable(Block html) {
|
||||
|
@ -248,4 +263,10 @@ public class RMAppAttemptBlock extends AppAttemptBlock{
|
|||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void createTablesForAttemptMetrics(Block html) {
|
||||
createContainerLocalityTable(html);
|
||||
createResourceRequestsTable(html);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue