Class UniformNodeSelector

    • Constructor Detail

      • UniformNodeSelector

        public UniformNodeSelector​(InternalNodeManager nodeManager,
                                   NodeTaskMap nodeTaskMap,
                                   boolean includeCoordinator,
                                   Supplier<NodeMap> nodeMap,
                                   int minCandidates,
                                   int maxSplitsPerNode,
                                   int maxPendingSplitsPerTask,
                                   boolean optimizedLocalScheduling)
    • Method Detail

      • computeAssignments

        public SplitPlacementResult computeAssignments​(Set<Split> splits,
                                                       List<RemoteTask> existingTasks)
        Description copied from interface: NodeSelector
        Identifies the nodes for running the specified splits.
        Specified by:
        computeAssignments in interface NodeSelector
        Parameters:
        splits - the splits that need to be assigned to nodes
        Returns:
        a multimap from node to splits only for splits for which we could identify a node to schedule on. If we cannot find an assignment for a split, it is not included in the map. Also returns a future indicating when to reattempt scheduling of this batch of splits, if some of them could not be scheduled.
      • computeAssignments

        public SplitPlacementResult computeAssignments​(Set<Split> splits,
                                                       List<RemoteTask> existingTasks,
                                                       BucketNodeMap bucketNodeMap)
        Description copied from interface: NodeSelector
        Identifies the nodes for running the specified splits based on a precomputed fixed partitioning.
        Specified by:
        computeAssignments in interface NodeSelector
        Parameters:
        splits - the splits that need to be assigned to nodes
        Returns:
        a multimap from node to splits only for splits for which we could identify a node with free space. If we cannot find an assignment for a split, it is not included in the map. Also returns a future indicating when to reattempt scheduling of this batch of splits, if some of them could not be scheduled.
      • redistributeSplit

        public static void redistributeSplit​(com.google.common.collect.Multimap<InternalNode,​Split> assignment,
                                             InternalNode fromNode,
                                             InternalNode toNode,
                                             com.google.common.collect.SetMultimap<InetAddress,​InternalNode> nodesByHost)
        The method selects and removes a split from the fromNode and assigns it to the toNode. There is an attempt to redistribute a Non-local split if possible. This case is possible when there are multiple queries running simultaneously. If a Non-local split cannot be found in the maxNode, any split is selected randomly and reassigned.