Trino--节点分配
2023-07-08 21:08:43 0 举报
trino 的节点分配逻辑
作者其他创作
大纲/内容
CIDR 网络拓扑
UniformNodeSelector
computeAssignments(三个参数)
chosenNode
是
NodeAssignmentStats
这个值最小的 InternalNode
long getQueuedSplitsWeightForStage
assignment
FileBasedNetworkTopology
Filter
192.168.0.192
List<InternalNode> getFreeNodesForStage
Split
boolean isRemotelyAccessible()
否
private final long maxSplitsWeightPerNode; private final long maxPendingSplitsWeightPerTask; private final int maxUnacknowledgedSplitsPerTask;
没有区域划分,统一管理所有节点
AtomicReference<Supplier<NodeMap>> nodeMap;
computeAssignments(两个参数)
optimizedLocalScheduling
TopologyAwareNodeSelector
AtomicReference<Supplier<NodeMap>> nodeMap
NodeScheduler
随机选取
List<InternalNode> selectNodes
candidateNodes
根据区域划分拓扑结构
NodeAssignmentStats::getUnacknowledgedSplitCountForStage
< maxUnacknowledgedSplitsPerTask
currentWeight(备选节点的)+ SplitWeight::getRawValue(已有的)
< maxSplitsWeightPerNode
currentWeight == 0
maxUnacknowledgedSplitsPerTask >0
NodeSelector 提供了对应节点的分配算法,有两个实现类:TopologyAwareNodeSelector: 基于网络拓扑距离的选择器 如果 split 不能任意调度,那么会从 split 返回的节点中选择 对于可以任意调度的 split,根据 split 的节点和 NetworkPath 获取节点列表。 根据 Node 上所有 Split 权重,或是 Node 上排队 Split 的权重平衡选择节点。 如果仍然没有找到,那么返回等待 split 空间的 Future。UniformNodeSelector: 默认的均衡选择器 如果开启了本地调度优化尽量将 split 放在本地节点上,否则 (无法任意调度的 split 只能从自己返回的节点中选择) 随机选取若干节点 (count>=minCandidates) 每次选取有最小权重的 Node。即尽量使不同 Node 上所有 Split 权重的平衡,或是不同 Node 上排队 Split 的权重平衡 (默认策略)。 如果仍然没有找到,那么返回等待 split 空间的 Future。设置调度拆分时要使用的节点调度程序策略。 1:uniform 尝试在数据所在的主机上安排拆分,同时在所有主机上保持均匀分布。 2:topology 尝试根据节点和拆分之间的拓扑距离来调度拆分。 对于分布式存储在与 Trino 工作节点相同的节点上运行的集群,建议使用 uniform。
为空
NodeAssignmentStats::getTotalSplitsWeight(Node)
maxSplitsWeightPerNode
maxUnacknowledgedSplitsPerTask
Node
SubnetBasedTopology
NetworkLocation locate
1:同Port&Host,2:同Host,......
List<InternalNode> selectExactNodes
192.168.0.224
InternalNode chooseNodeForSplit
freeNodes
BucketNodeMap
List<InternalNode> bucketToNode
InternalNode getAssignedNode(Split split-->bucketID)
CIDR:CIDR(Classless Inter Domain Routing)改进了传统的IPv4地址分类。传统的IP分类将IP地址直接对应为默认的分类,从而将Internet分割为网络。CIDR在路由表中增加了子网掩码(subnet masking),从而可以更细分网络。利用CIDR,我们可以灵活的将某个范围的IP地址分配给某个网络。(https://www.cnblogs.com/vamei/archive/2013/01/24/2798226.html)Segment:集群中的网段
192.168.0.128
NodeSelector
详细信息:https://www.processon.com/diagraming/642b7963010dd82ad5160196
输出结果
long getTotalSplitsWeight
Stage
非空
192.168.0.0
192.168.0.172
SplitsBalancingPolicy
同 UniformNodeSelector
NetworkLocation
/region1/rack1/machine1
192.168.0.160
SplitPlacementResult selectDistributionNodes
InternalNode bestNodeSplitCount
设置 blocked 等待
0 条评论
下一页