public static ResourceRequest newResourceRequest(ResourceRequest r) { ResourceRequest request = recordFactory .newRecordInstance(ResourceRequest.class); request.setPriority(r.getPriority()); request.setResourceName(r.getResourceName()); request.setCapability(r.getCapability()); request.setNumContainers(r.getNumContainers()); request.setNodeLabelExpression(r.getNodeLabelExpression()); return request; }
private List<ResourceRequest> cloneAsks() { List<ResourceRequest> askList = new ArrayList<ResourceRequest>(ask.size()); for(ResourceRequest r : ask) { // create a copy of ResourceRequest as we might change it while the // RPC layer is using it to send info across ResourceRequest rr = ResourceRequest.newInstance(r.getPriority(), r.getResourceName(), r.getCapability(), r.getNumContainers(), r.getRelaxLocality(), r.getNodeLabelExpression()); askList.add(rr); } return askList; }
public ResourceRequest cloneResourceRequest(ResourceRequest request) { ResourceRequest newRequest = ResourceRequest.newInstance( request.getPriority(), request.getResourceName(), request.getCapability(), 1, request.getRelaxLocality()); return newRequest; } }
private void decResourceRequest(String resourceName, ResourceRequest request) { request.setNumContainers(request.getNumContainers() - 1); if (request.getNumContainers() == 0) { resourceRequestMap.remove(resourceName); } }
private ResourceRequest createAMResourceRequest(String resource, Resource capability) { ResourceRequest resourceRequest = recordFactory.newRecordInstance(ResourceRequest.class); resourceRequest.setPriority(AM_CONTAINER_PRIORITY); resourceRequest.setResourceName(resource); resourceRequest.setCapability(capability); resourceRequest.setNumContainers(1); resourceRequest.setRelaxLocality(true); return resourceRequest; }
@Override public int hashCode() { final int prime = 2153; int result = 2459; Resource capability = getCapability(); String hostName = getResourceName(); Priority priority = getPriority(); result = prime * result + ((capability == null) ? 0 : capability.hashCode()); result = prime * result + ((hostName == null) ? 0 : hostName.hashCode()); result = prime * result + getNumContainers(); result = prime * result + ((priority == null) ? 0 : priority.hashCode()); result = prime * result + Long.valueOf(getAllocationRequestId()).hashCode(); return result; }
public ResourceRequestInfo(ResourceRequest request) { priority = request.getPriority().getPriority(); allocationRequestId = request.getAllocationRequestId(); resourceName = request.getResourceName(); capability = new ResourceInfo(request.getCapability()); numContainers = request.getNumContainers(); relaxLocality = request.getRelaxLocality(); nodeLabelExpression = request.getNodeLabelExpression(); if (request.getExecutionTypeRequest() != null) { executionTypeRequest = new ExecutionTypeRequestInfo(request.getExecutionTypeRequest()); } }
public static ResourceRequest createResourceRequest(String host, int amount, int memory) { ResourceRequest rsrcRequest = Records.newRecord(ResourceRequest.class); rsrcRequest.setHostName(host); Priority pri = Records.newRecord(Priority.class); pri.setPriority(0); rsrcRequest.setPriority(pri); Resource capability = Records.newRecord(Resource.class); capability.setMemory(memory); rsrcRequest.setCapability(capability); rsrcRequest.setNumContainers(amount); LOG.debug("Created a resource request" + ", host=" + rsrcRequest.getHostName() + ", memory=" + rsrcRequest.getCapability().getMemory() + ", amount=" + rsrcRequest.getNumContainers() + ", priority=" + rsrcRequest.getPriority().getPriority()); return rsrcRequest; } }
private static ResourceRequest createResourceReqForIncrease( SchedulerRequestKey schedulerRequestKey, Resource resToIncrease, ResourceRequest rr, RMContainer rmContainer, String resourceName) { rr.setResourceName(resourceName); rr.setNumContainers(1); rr.setRelaxLocality(false); rr.setPriority(rmContainer.getContainer().getPriority()); rr.setAllocationRequestId(schedulerRequestKey.getAllocationRequestId()); rr.setCapability(resToIncrease); rr.setNodeLabelExpression(rmContainer.getNodeLabelExpression()); rr.setExecutionTypeRequest(ExecutionTypeRequest.newInstance( ExecutionType.GUARANTEED, true)); return rr; }
@Override public int compare(ResourceRequest r1, ResourceRequest r2) { // Compare priority, host and capability int ret = r1.getPriority().compareTo(r2.getPriority()); if (ret == 0) { String h1 = r1.getResourceName(); String h2 = r2.getResourceName(); ret = h1.compareTo(h2); } if (ret == 0) { ret = r1.getCapability().compareTo(r2.getCapability()); } return ret; } }
protected ResourceRequest createResourceRequest(long id, String resource, int memory, int vCores, int priority, ExecutionType execType, int containers) { ResourceRequest req = Records.newRecord(ResourceRequest.class); req.setAllocationRequestId(id); req.setResourceName(resource); req.setCapability(Resource.newInstance(memory, vCores)); req.setPriority(Priority.newInstance(priority)); req.setExecutionTypeRequest(ExecutionTypeRequest.newInstance(execType)); req.setNumContainers(containers); return req; }
private ResourceRequestBuilder() { resourceRequest.setResourceName(ANY); resourceRequest.setNumContainers(1); resourceRequest.setPriority(Priority.newInstance(0)); resourceRequest.setRelaxLocality(true); resourceRequest.setExecutionTypeRequest( ExecutionTypeRequest.newInstance()); }
public synchronized Resource getTotalPendingRequests() { Resource ret = Resource.newInstance(0, 0); for (ResourceRequest rr : appSchedulingInfo.getAllResourceRequests()) { // to avoid double counting we count only "ANY" resource requests if (ResourceRequest.isAnyLocation(rr.getResourceName())){ Resources.addTo(ret, Resources.multiply(rr.getCapability(), rr.getNumContainers())); } } return ret; }
private static void normalizeNodeLabelExpressionInRequest( ResourceRequest resReq, QueueInfo queueInfo) { String labelExp = resReq.getNodeLabelExpression(); // if queue has default label expression, and RR doesn't have, use the // default label expression of queue if (labelExp == null && queueInfo != null && ResourceRequest.ANY .equals(resReq.getResourceName())) { labelExp = queueInfo.getDefaultNodeLabelExpression(); } // If labelExp still equals to null, set it to be NO_LABEL if (labelExp == null) { labelExp = RMNodeLabelsManager.NO_LABEL; } resReq.setNodeLabelExpression(labelExp); }
private Resource getTotalResource(List<ResourceRequest> requests) { Resource totalResource = Resource.newInstance(0, 0); 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())); } } return totalResource; }
private synchronized void addResourceRequest( SchedulerRequestKey schedulerKey, Map<String, ResourceRequest> requests, String resourceName, Resource capability) { ResourceRequest request = requests.get(resourceName); if (request == null) { request = org.apache.hadoop.yarn.server.utils.BuilderUtils.newResourceRequest( schedulerKey.getPriority(), resourceName, capability, 1); requests.put(resourceName, request); } else { request.setNumContainers(request.getNumContainers() + 1); } if (request.getNodeLabelExpression() == null) { request.setNodeLabelExpression(RMNodeLabelsManager.NO_LABEL); } // Note this down for next interaction with ResourceManager ask.remove(request); // clone to ensure the RM doesn't manipulate the same obj ask.add(ResourceRequest.clone(request)); if (LOG.isDebugEnabled()) { LOG.debug("addResourceRequest: applicationId=" + applicationId.getId() + " priority=" + schedulerKey.getPriority().getPriority() + " resourceName=" + resourceName + " capability=" + capability + " numContainers=" + request.getNumContainers() + " #asks=" + ask.size()); } }
@Override public PendingAsk getPendingAsk(String resourceName) { try { readLock.lock(); ResourceRequest request = getResourceRequest(resourceName); if (null == request) { return PendingAsk.ZERO; } else{ return new PendingAsk(request.getCapability(), request.getNumContainers()); } } finally { readLock.unlock(); } }
synchronized private void decrementOutstanding( ResourceRequest offSwitchRequest) { int numOffSwitchContainers = offSwitchRequest.getNumContainers() - 1; // Do not remove ANY offSwitchRequest.setNumContainers(numOffSwitchContainers); // Do we have any outstanding requests? // If there is nothing, we need to deactivate this application if (numOffSwitchContainers == 0) { priorities.remove(offSwitchRequest.getPriority()); checkForDeactivation(); } }
protected void setRequestLimit(Priority priority, Resource capability, int limit) { if (limit < 0) { limit = Integer.MAX_VALUE; } ResourceRequest newReqLimit = ResourceRequest.newInstance(priority, ResourceRequest.ANY, capability, limit); ResourceRequest oldReqLimit = requestLimits.put(newReqLimit, newReqLimit); if (oldReqLimit == null || oldReqLimit.getNumContainers() < limit) { requestLimitsToUpdate.add(newReqLimit); } }
@Public @Stable public static ResourceRequest newInstance(Priority priority, String hostName, Resource capability, int numContainers) { return newInstance(priority, hostName, capability, numContainers, true); }