Details
-
Sub-task
-
Status: Resolved
-
Critical
-
Resolution: Fixed
-
3.3.0
-
Reviewed
Description
1) Entry point:
When we do multi-node allocation, we're using the same logic of async scheduling:
// Allocate containers of node [start, end) for (FiCaSchedulerNode node : nodes) { if (current++ >= start) { if (shouldSkipNodeSchedule(node, cs, printSkipedNodeLogging)) { continue; } cs.allocateContainersToNode(node.getNodeID(), false); } }
Is it the most effective way to do multi-node scheduling? Should we allocate based on partitions? In above logic, if we have thousands of node in one partition, we will repeatly access all nodes of the partition thousands of times.
I would suggest looking at making entry-point for node-heartbeat, async-scheduling (single node), and async-scheduling (multi-node) to be different.
Node-heartbeat and async-scheduling (single node) can be still similar and share most of the code.
async-scheduling (multi-node): should iterate partition first, using pseudo code like:
for (partition : all partitions) {
allocateContainersOnMultiNodes(getCandidate(partition))
}
Attachments
Issue Links
- relates to
-
YARN-10572 Merge YARN-8557 and YARN-10352, and rebase based YARN-10380.
- Resolved
- links to