搜索

32 Spark调度机制

gecimao 发表于 2019-07-26 02:16 | 查看: | 回复:

  Spark调度机制是保证Spark应用高效执行的关键。本节从Application、job、stage和task的维度,从上层到底层来一步一步揭示Spark的调度策略。

  Spark中,每个Application对应一个SparkContext。SparkContext之间的调度关系取决于Spark的运行模式。对Standalone模式而言,Spark Master节点先计算集群内的计算资源能否满足等待队列中的应用对内存和CPU资源的需求,如果可以,则Master创建Spark Driver,启动应用的执行。宏观上来讲,这种对应用的调度类似于FIFO策略。在Mesos和YARN模式下,底层的资源调度系统的调度策略都是由Mesos和YARN决定的。具体分类描述如下:

  默认以用户提交Application的顺序来调度,即FIFO策略。每个应用执行时独占所有资源。如果有多个用户要共享集群资源,则可以使用参数es.max来配置应用在集群中可以使用的最大CPU核数。如果不配置,则采用默认参数spark.deploy. defaultCore的值来确定。

  如果在Mesos上运行Spark,用户想要静态配置资源的话,可以设置os. coarse为true,这样Mesos变为粗粒度调度模式,然后可以设置spark.cores.max指定集群中可以使用的最大核数,与上面的Standalone模式类似。同时,在Mesos模式下,用户还可以设置参数spark.executor.memory来配置每个executor的内存使用量。如果想使Mesos在细粒度模式下运行,可以通过mesos://设置动态共享cpu core的执行模式。在这种模式下,应用不执行时的空闲CPU资源得以被其他用户使用,提升了CPU使用率。

  前面章节提到过,Spark应用程序实际上是一系列对RDD的操作,这些操作直至遇见Action算子,才触发Job的提交。事实上,在底层实现中,Action算子最后调用了runJob函数提交Job给Spark。其他的操作只是生成对应的RDD关系链。如在RDD. scala程序文件中,count函数源码所示。

  其中sc为SparkContext的对象。可见在Spark中,对Job的提交都是在Action算子中隐式完成的,并不需要用户显式地提交作业。在SparkContext中Job提交的实现中,最后会调用DAGScheduler中的Job提交接口。DAGScheduler最重要的任务之一就是计算Job与Task的依赖关系,制定调度逻辑。

  Job调度的基本工作流程如图3-4所示,每个Job从提交到完成,都要经历一系列步骤,拆分成以Tsk为最小单位,按照一定逻辑依赖关系的执行序列。

  图3-5则从Job调度流程中的细节模块出发,揭示了工作流程与对应模块之间的关系。从整体上描述了各个类在Job调度流程中的交互关系。

  Spark在FAIR的模式下,采用轮询的方式为多个Job分配资源,调度Job。所有的任务优先级大致相同,共享集群计算资源。具体实现代码在SchedulingAlgorithm.scala文件中,声明如下:

  DAGScheduler构建了具有依赖关系的任务集。TaskScheduler负责提供任务给Task-SetManager作为调度的先决条件。TaskSetManager负责具体任务集内部的调度任务。调度池(pool)则用于调度每个SparkContext运行时并存的多个互相独立无依赖关系的任务集。调度池负责管理下一级的调度池和TaskSetManager对象。

  2)weight:调度池的权重,在获取集群资源上权重高的可以获取多个资源。

  当一个Job被提交后,DAGScheduler会从RDD依赖链的末端触发,遍历整个RDD依赖链,划分Stage(调度阶段)。划分依据主要基于ShuffleDependency依赖关系。换句话说,当某RDD在计算中需要将数据进行Shuffle操作时,这个包含Shuffle操作的RDD将会被用来作为输入信息,构成一个新的Stage。以这个基准作为划分Stage,可以保证存在依赖关系的数据按照正确数据得到处理和运算。在Spark1.5.0的源代码中,DAGScheduler.scala中的getParentStages函数的实现从一定角度揭示了Stage的划分逻辑。

  在Stage提交时,DAGScheduler首先会判断该Stage的父Stage的执行结果是否可用。如果所有父Stage的执行结果都可用,则提交该Stage。如果有任意一个父Stage的结果不可用,则尝试迭代提交该父Stage。所有结果不可用的Stage都将会被加入waiting队列,等待执行,如图3-6所示。

  在图3-6中,虚箭头表示依赖关系。Stage序号越小,表示Stage越靠近上游。

  1、 性能调优 1.1、 分配更多资源 1.1.1、分配哪些资源? Executor的数量 每个Executor所能分配的CPU数量 每个Executor所能分配的内存量 Driver端分配的内存数量 1.1.2、在哪里分配这些资源? 在生产环境中,提交spark作业时,用...

  现在的特色小吃,越来越受到消费者的喜爱和追捧,尤其是鸡排更是一种高人气美味,现在的鸡排种类很多,不过真正做到健康美味,而且有自身特色的鸡排品牌却并不多。世创正新鸡排作为绿色的餐饮企业,为消费者提供各种特色的美味小吃,那么,世创正新鸡排美味到底怎么样呢?大家不妨一起来了解一下...

  在孩子不愿意的情况下强行将玩具送人,是在透支孩子对家长的信任,也是在破坏孩子的安全感和自尊。 01 最近,到处乱窜的希声君看到了一个很有意思的问题:“做客孩子临走时带走几只玩具,我的孩子抗拒并一直哭,要怎么开导?”下面的评论自然一致批判问这问题的家长。 看着家长后面不断改措...

  也许是感性,也许是矫情,也许没那么多为什么。 跟别人聊天,无意中的一句话,就会把我带回过去的记忆。然后翻来记录,看到当时的状态,感慨颇多。 有人说,当一个人习惯回忆过去的时候,他就已经老了。对于一个还可以过一个青年节的青年来说,老,太矫情了。只是,我们终究都长大了。尽管可能...

本文链接:http://olivierlutaud.net/diaoduxinxichi/850.html
随机为您推荐歌词

联系我们 | 关于我们 | 网友投稿 | 版权声明 | 广告服务 | 站点统计 | 网站地图

版权声明:本站资源均来自互联网,如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

Copyright @ 2012-2013 织梦猫 版权所有  Powered by Dedecms 5.7
渝ICP备10013703号  

回顶部