zoukankan      html  css  js  c++  java
  • spark延迟调度与动态资源管理

    Spark中的延迟调度

    Spark的Task的调度过程有五个本地性级别:PROCESS_NODE、NODE_LOCAL、NO_PREF、RACK_LOCAL、ANY。在理想的状态下,我们肯定是想所有的Task的调度都是PROCESS_NODE级别的,这样的话所有的Task都是在数据所在的机器上进行计算,这样的计算效率是最好的。但是实际的情况并不是这样的,因为Spark在Task的调度过程会发生如下两种情况:
    1、数据所在的机器上的Executor没有空闲的cpu资源
    2、含有空闲cpu资源的Executor所在的机器上并没有数据
    出现以上两种情况的时候,我们可能就需要舍弃掉最好的数据本地性了,这就是延迟调度需要做的事情,对于第一种情况,延迟调度让Task等一定的时间(默认是配置spark.locality.wait=3s),以期望数据所在机器上的Executor上的cpu释放,然后再调度到这个Executor上,那如果这个Executor的cpu一直没有释放(即Task等的时间超过一定的时间了)呢,这个时候Spark就直接将这个Task调度到含有空闲cpu资源但是没有数据的Executor,这个时候虽然Task的本地性级别不高,但是可能比你等待含有数据的Executor释放空闲cpu来的更高效

     

    Spark中的动态资源管理

    根据集群计算需要的资源动态的决定Executor的个数,在一个Spark应用执行过程中,如果一个Executor没有任何的Task执行,这种空闲状态如果保持了一定的时间(默认是60s)后,那么这个Executor将会从集群中被删除掉。当Driver端有Task pending等待了一定时间(默认是1秒)后还没被调度执行的话,则会申请增加Executor,这样动态的决定需要Executor可以使得整个集群资源使用效率更高,更多的会用在spark-shell以及Spark SQL的ThriftServer中
  • 相关阅读:
    文献阅读方法 & 如何阅读英文文献
    科研方法
    水熊虫
    表达谱(DGE)测序与转录组测序的差别
    单细胞测序
    SGE:qsub/qstat/qdel/qhost 任务投递和监控
    统计分布汇总 | 生物信息学应用 | R代码 | Univariate distribution relationships
    JELLYFISH
    外泌体
    CDS & ORF & 启动子 & 终止子 & 转录因子 & 基因结构 & UTR
  • 原文地址:https://www.cnblogs.com/tesla-turing/p/11959032.html
Copyright © 2011-2022 走看看