zoukankan      html  css  js  c++  java
  • <续>调度算法补充

    cpmpute->executors:

    • 1.从storm配置获取<compoent-id,parallelism>集合
    • 2.storm-task-info 获得<task-id, compoent-id>集合
    • 3.将集合处理为 [compoent-id, tasks]
    • 4.将<compoent-id,parallelism>和<compoent-id,tasks> join得到<compoent-id,[parallelism,tasks]>
    • 5.根据[parallelism,tasks]将task均分到数目为parallelism的分区,返回每个parallelism的[task-1,task-2,...]
    • 6.将返回的转换为executor集合[start-task-id,end-task-id]

    get-alive-assigned-node+port -> executors:

    • 1.获得当前topology的assignment
    • 2.如不为空,则获得其中的<executors,slot>
    • 3.转化为[executors,[node,port]]
    • 4.再次转化为<[node,port],executors>
    • 5.返回结果

    sort-slots:

    • 1.将所有可用的slots作为参数传入
    • 2.根据supervisor-id进行分组排序
    • 3.调用intervel-all方法对分组排序后的结果结合colls进行处理
      • 1 colls不为空,则调用map first方法对集合处理:遍历colls,取每个supervisor的第一条记录,加入到my-elments中。
      • 2 递归调用interval-all处理剩下的集合。

    参见下图:

    bad-slots:

    • 1.参数需要:此topology已经分配的资源existing-slots、此topology的所有
      的executor、此topology可使用的slot数目
    • 2.根据executer数和可使用的slot数计算出一个<executor-count,slot-count>,executor-count表示一个slot里面的executor数目,slot-count表示这样的slot有多少个。比如 10个executor ,4个slot可能的计算结果为<2,2>,❤️,2>
    • 3.再根据传入的existing-slots中的每一项计算其executor-count
      • 把计算得到的executor-count作为键去集合<executor-count,slot-count>里面取,如果找到的值大于0,说明存在这样的分配,保持这样的分配,将其加入到keeps中,对应的slot-count的值减一,继续下一个计算
    • 4.遍历完existing-slots集合后,可能会未加入keeps集合的元素,此时这些就是可以被释放的资源。具体做法就是:existing-slots和keeps做差值,剩下的,就可以释放。作为结果返回。
    吴承桀的博客
  • 相关阅读:
    Codeforces Round #340 (Div. 2)
    搞清楚一下格式化输出
    TYVJ P1091 等差数列 Label:dp
    TYVJ P1098 任务安排 Label:倒推dp 不懂
    TYVJ P1034 尼克的任务 Label:倒推dp
    TYVJ P1045 &&洛谷 1388 最大的算式 Label:dp
    TYVJ P1046 Blast Label:dp
    TYVJ P1051 选课 Label:多叉转二叉&&树形dp(虐心♥)
    TYVJ P1073 加分二叉树 Label:区间dp
    二叉树遍历入门 Lebal:research
  • 原文地址:https://www.cnblogs.com/Chuck-wu/p/4983892.html
Copyright © 2011-2022 走看看