计算框架Spark之任务调度
于使用的cluster manager。 资源的静态分区(static partitioning)可被所有的cluster manager获得,这样每个application在他的生命周期内都可获得他能使用的最多资源。standalone、YARN、coarse-grained Mesos mode这三种模式使用的就是这种方式。 1.1控制资源使用 集群类型下,如下配置资源分配:
应用之间无法共享内存。 1.2动态资源分配 Spark提供了依据应用的工作量动态调整资源的机制。这意味着你的application不在使用的资源会返还给集群,当需要的时候再申请分配资源,这种特性对于多应用共享集群特别有用。 这个特性默认失效,但在所有coarse-grained cluster manager上都可用,如:standalone mode, YARN mode, 和Mesos coarse-grained mode。 使用这个特性有两个要求。首先用于必须设置spark.dynamicAllocation.enabled=true,其次要设置external shuffle service在集群上的每个worker node并设置spark.shuffle.service.enabled=true。设置external shuffle service目的是executor可被移除但是不删除他们生成的shuffle文件。 设置这个变量的方式为:
1.3资源分配策略 当Spark不再使用executor时就出让它,需要的时候再获取它。因为没有一个确定的方式预测将要被移除的executor是否在不久的将来会被使用,或者一个将要被添加的新executor实际上是否是空闲的,所以我们需要一系列试探来确定是移除executor(可能会移除多个)还是请求executor(可能会请求多个)。 请求策略 开启Spark application动态分配资源特性,当pending task等待被调度时,Spark application会请求额外的executor。这就意味着,当前的这些executor无法同时满足所有的task,这些task已经被提交,但是还没有执行完。
Spark轮流请求executor。当task等待的时间大于spark.dynamicAllocation.schedulerBacklogTimeout时,真正的请求(申请executor的请求)被触发,之后,如果未完成task队列存在,那么每隔spark.dynamicAllocation.sustainedSchedulerBacklogTi (编辑:常州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |