搜索

Spark的调度系统

gecimao 发表于 2019-07-12 21:40 | 查看: | 回复:

  Spark调度机制可以理解为两个层面的调度。首先,是Spark Application调度。也就是Spark应用程序在集群运行的调度,应用程序包括Driver调度和Executor调度。其次,就是每个Spark Application都会有若干Jobs(Spark Actions),然后这些job是以何种机制,在Executor上执行的,也是需要一个调度管理的机制,该层面调度也可以理解为SparkContext内部调度。之所以会出现这种情况,主要是生产中可能会希望一个SparkContext作为服务,同时执行若干Jobs,此时可以用Spark Application的Fair机制的调度。

  在以集群的方式运行Spark App时,每个Spark App会包含一些列独立资源的Executor JVMs,这些JVMs仅仅运行该App的tasks,缓存该App的数据。当有多个应用或者多个程序在你的集群中运行时,这就牵涉到如何在集群中给这些Spark App分配资源。

  最简单的方式是提供静态资源分配。也即给运行程序分配固定资源,资源数在该程序运行期间都不会有变动。这种方式出现在Spark的Standalone,yarn和coarse-grained Mesos 模式。资源的分配方式,在每种集群运行模式中有些不同:

  默认情况下,app在Standalone集群中以FIFO的方式运行。您可以通过设置es.max配置属性来限制应用程序使用的节点数,也可以通过spark.deploy.defaultCores更改未设置此应用程序的默认值。 最后,除了控制cores之外,每个应用程序可以使用ory配置控制其内存使用。

  在Mesos模式下还有一个可选项,那就是动态共享Core。在这种模式下,Spark App依然拥有固定数量和独立的内存(spark.executor.memory设置),但是当Spark App在一个机器上没有运行的task的时候,其它的程序可以使用这些cores运行tasks。当你需要运行大量不活跃的Spark App时,此模式是有用的。但是此模式,是有一定风险的,因为当Spark App需要恢复使用这些cores的时候,需要等待一些时间才能使用这些core去执行任务。要使用此模式,只需要使用mesos://URL并将spark.executor.coarse设置为false。

  请注意,目前没有提供任何夸应用程序的内存共享。如果想进行夸应用程序共享数据,建议使用第三方存储,例如tachyon来实现内存共享。

  Spark提供了一种动态调整应用程序占用资源的机制。 这意味着如果您的应用程序不再使用,您的应用程序可能会将资源返回给群集,并在需要时再次请求它们。 如果多个应用程序在Spark群集中共享资源,则此功能特别有用。

  第二,需要在集群中每个节点启用外部shuffle服务,设置spark.shuffle.service.enabled为true。使用这种模式,运行应用程序在深处的时候,不需要删除它们输出的shuffle的文件。根据不同的集群管理器,该服务的设置方式稍微有点不同。

  A),在编译Spark的时候要添加yarn属性。假如,已经添加该属性,并分发到集群中,跳过此步骤。

  在高层次上,Spark在不再使用时应放弃executors ,在需要时申请executors 。 既然没有确定的方法可以预测即将被删除的executors 是否会在不久的将来执行任务,还是将要添加的新的执行者实际上是空闲的,那么我们需要一套启发式来确定 何时删除,请求executors 。

  允许动态申请内存的Spark应用程序在存在等待执行的task的时候会申请额外的Executors。

  指数增长政策的动机是双重的。应用程序申请Executor应该谨慎,证明少量Executor即可完成任务。这反映了TCP缓慢启动的理由。第二,应用程序应该能够及时提高其资源使用情况,以证明实际需要许多Executor。

  在动态分配之前,Spark Executors在出现故障或退出相关应用程序时退出。在这两种情况下,与Executors相关联的所有状态不再需要,可以被安全地丢弃。然而,通过动态分配,当Executors被显式删除时,应用程序仍在运行。如果应用程序尝试访问由Executors存储或写入的状态,则必须执行重新计算状态。因此,Spark需要一种机制,通过在删除执行程序之前保留其状态才能正常退出Executors。

  这个要求对于shuffle尤其重要。Shuffle期间,SparkExecutor首先写map输出到磁盘,然后当做文件服务器,提供给其它Executor获取这些输出文件。存在落后的tasks,他们运行的时间比其它tasks长,动态申请的Executor有可能在shuffle未结束之前就被移除了,在这种情况下,shuffle输出文件必须要重新计算,这个是很没必要的。

  可以使用外部shuffle服务保存shuffle输出文件,从spark 1.2开始引入。此服务是指一个长期运行的进程,它们独立于Spark应用程序及其executors,在集群的每个节点上运行。如果服务已启用,Spark执行程序将从服务中获取shuffle文件,而不是从其它Executor。这意味着由执行人员写入的任何shuffle 状态可能会继续执行超出Executor的生命周期。

  除了写shuffle文件之外,执行程序还可以在磁盘或内存中缓存数据。但是,当执行器被删除时,所有缓存的数据将不再可访问。为了避免这种情况,默认的包含缓存数据的executors 永远不会被删除。您可以使用spark.dynamicAllocation.cachedExecutorIdleTimeout配置此行为。在将来的版本中,缓存的数据可能会通过堆栈外的存储来保存,这个存储类似于通过外部shuffle服务来保存shuffle文件的方式。

  在给定的Spark应用程序(SparkContext实例)中,如果从单独的线程提交多个并行作业,则可以同时运行。“job”,在本节中,我们是指一个Spark action(例如,save,collect)以及任何需要运行的任务以评估该动作。Spark的调度程序是完全线程安全的,并支持这种用例来启用提供多个请求的应用程序(例如,多个用户的查询)。

  默认情况下,Spark的调度程序以FIFO方式运行作业。每个job会被划分成很多stage(例如,map阶段,reduce阶段),在第一个job运行技术之后,第二个job才有会去执行。如果在队列头部的job不需要使用集群的全部资源,那么后面的job可以立即执行。队列头部的job很大的话,其余的job必须推迟执行。

  从Spark 0.8开始,也可以在作业之间配置公平的共享。在公平分享下,Spark以“循环”方式在任务之间分配tasks,使所有job获得大致相等的集群资源份额。这意味着长job运行期间提交的短job,也可以立即获取到资源,并且仍然可以获得良好的响应时间,而无需等待长job完成。此模式最适合多用户。

  公平调度程序还支持将作业分组到池中,并为每个池设置不同的调度选项(例如权重)。这对于为更重要的job创建“高优先级”池是有用的,或将每个用户的job分组在一起,并给予用户相等的份额,而不管他们有多少并发作业,而不是给予作业相等的份额。这种方法是在Hadoop Fair Scheduler之后建模的。这种方法是在Hadoop Fair Scheduler之后建模的。

  没有任何干预,新提交的作业进入默认池,但是可以通过向提交的线程中的SparkContext添加spark.scheduler.pool“local property”来设置作业的池。如下:

  设置此本地属性后,在此线程中提交的所有作业(通过此线程中的调用到RDD.save,count,collect等)将使用此pool 名称。该设置是每个线程,使得线程可以代表同一用户运行多个作业变得容易。如果要清除线程与之关联的池,只需调用:

  默认情况下,每个pool获得相同的集群份额(在默认池中每个job获得相同的共享资源),但是每个池中的作业依然是FIFO的顺序运行。例如,如果您为每个用户创建一个池,这意味着每个用户将获得该群集的相等份额,并且每个用户的查询将按顺序运行。

  这可以是FIFO或FAIR,以控制池中的作业以队列的形式顺序执行(默认),或公平分享池的资源。

  这可以控制池相对于其他池的共享。默认情况下,所有池的权重均为1.如果将特定池的权重设置为2,例如,它将获得两倍的资源相比其他活跃的池。设置诸如1000之类的高重量也使得可以在池之间实现优先级 - 实质上,weight-1000池将始终在任务激活时首先启动任务。

  除了总体weight之外,每个池可以被给予管理员希望具有的最小份额(如一些CPU内核)。公平调度员总是尝试在根据权重重新分配额外的资源之前满足所有活动池的最小份额。因此,minShare属性可以是另一种确保池总是能够快速获得一定数量的资源(例如10个内核)的方法。默认情况下,每个池的minShare为0。

  XML文件的格式只是每个池的一个pool元素,其中包含不同的元素,用于各种设置。 例如:

  conf / fairscheduler.xml.template中还提供了一个完整示例。 请注意,没有在XML文件中配置的任何池将简单地获取所有设置(调度模式FIFO,权重1和minShare 0)的默认值。

  后面会出文章写一个基于netty的Spark作为一种查询服务的Spark App。

  Azkaban是一种类似于Oozie的工作流控制引擎,可以用来解决多个Hadoop(或Spark等)离线计算任务之间的依赖关系问题。也可以用其代替cron来对周期性任务进行调度,并且更为直观,可靠,同...博文来自:偷闲小苑

  Spark任务调度1.任务调度流程图各个RDD之间存在着依赖关系,这些依赖关系就形成有向无环图DAG,DAGScheduler对这些依赖关系形成的DAG进行Stage划分,划分的规则很简单,从后往前回...博文来自:Running_Tiger的博客

  Spark资源调度机制定义当我们Spark应用程序提交到Spark集群的时候,首先Driver和Application会向Master发送注册请求,Master接受到请求以后会将他们加入到队列中等待启...博文来自:李玉志的博客

  1.Spark的调度机制简介Spark的调度机制有2类,主要是集群调度机制和应用程序内部的调度机制。理解其中的原理,便于我们更深入地了解Spark和性能优化。集群资源调度由集群资源管理器(Cluste...博文来自:PJ·Javis的专栏

  SparkScheduler内部原理讲解分布式运行框架Spark可以部署在多种资源管理平台,例如Yarn、Mesos等,Spark本身也实现了一个简易的资源管理机制,称之为Standalone模式。由...博文来自:maketubu7的博客

  文章目录资源调度结论:1、默认情况下,每一个Worker会为当前的Application启动一个Executor进程,并且这个Executor会使用1G内存和当前Worker所能管理的所有core。2...博文来自:滴水穿石的博客

  说明:本文所讲的Spark资源调度与任务调度是standalone模式下的调度,其它模式下的调度(如Yarn、Mesos等)暂不涉及。我们结合具体的应用案例——WordCount.scala来详细说明...博文来自:u010476994的博客

  文章目录绪论1、伪代码2、小知识点普及3、图解4、流程介绍绪论  阅读前请参考《Spark的任务调度》和《Spark的资源调度》,以便您更好的理解本文内容。1、伪代码  下面这段伪代码就是用Scala...博文来自:身为风帆的博客

  1.DAG调度器简介DAG即DirectedAcyclicGraph,有向无环图的意思,Spark会存储RDD之间的依赖广西,依赖关系是有向的,总是由子RDD指向父RDD(平时我们看到的箭头一般是数据...博文来自:PJ·Javis的专栏

  文章目录1、绪论2、前置知识3、流程图4、详细步骤1、绪论    上图是Spark程序运行时的一个超级简单的概括。我们运行一个Spark应用程序时,首先第一步肯定是写一个SparkApplicatio...博文来自:身为风帆的博客

  一:spark调度管理的基本概念1.Application      基于Spark的应用程序,由一个或多个作业组成。每个应用程序的执行涉及Driverprogram和集群上的Executors两部分...博文来自:玉汝于成

  1、学习任务调度前需要了解的知识点 1.1、Spark中的一些专业术语  1.1.1、任务相关  1.1.2、资源相关1.2、RDD中的依赖关系1.2.1、宽依赖1.2.2、窄依赖1.2.3、宽窄依赖...博文来自:身为风帆的博客

  1gt;fifo(队列调度):fifoscheduler主要是将提交的作业放入到任务队列中,是一个先进先出的队列,在进行分配资源的时候,先给第一个任务分配足够的资源,才会给下一个任务分配资源...博文来自:w5201314ws6123的博客

  有几种方法可以监控Spark应用程序:WebUI,指标和外部检测。Web界面默认情况下,每个SparkContext都会在端口4040上启动WebUI,以显示有关应用程序的有用信息。这包括:调度程序阶...博文来自:跋跋寒的博客

  一、任务调度和资源调度的区别1.任务调度是通过DAGScheduler、TaskScheduler、SchedulerBackend等进行的作业调度2.资源调度是指应用程序如何获得资源3.任务调度是在...博文

  一、前述Spark的资源调度是个很重要的模块,只要搞懂原理,才能具体明白Spark是怎么执行的,所以尤其重要。自愿申请的话,本文分粗粒度和细粒度模式分别介绍。二、具体Spark资源调度流程图:    ...博文来自:L先生AI课堂

  讲说spark的资源调度和任务调度,基本的spark术语,这里不再多说,懂的人都懂了。。。按照数字顺序阅读,逐渐深入理解:以下所有截图均为个人上传,不知道为什么总是显示别人的QQ,好尴尬,无所谓啦,开...博文来自:jagel-95

  用户通过不同的线程提交的Job可以并发运行,但是受到资源的限制。Job到调度池(pool)内申请资源,调度池会根据工程的配置,决定采用哪种调度模式。FIFO模式   在默认情况下,Spark的调度器以...博文来自:ranran0224的博客

  1、fair调度模式 就是需要用户配置权重2、配置调度池  用户可以通过配置文件自定义调度池的属性1、调度模式2、权重3、minshare 配置多少个cpu的内核stage和tasksetmanage...博文来自:qiezikuaichuan的专栏

  Spark商业环境实战及调优进阶系列Spark商业环境实战-Spark内置框架rpc通讯机制及RpcEnv基础设施Spark商业环境实战-Spark事件监听总线流程分析Spark商业环境实战-Spar...博文来自:凯新云技术社区

  速度通常是衡量大数据处理系统性能的一个重要指标。相对于传统的大数据处理框架MapReduce,Spark的批处理速度比MapReduce快近10倍,内存中的数据分析速度则快近100倍。Spark在...博文来自:绣花针

  为什么spark sql有些任务特别慢?基本同样的input和shuffle数据量,大多数任务不到10几分钟就结束了,但有几个任务要30分钟以上,有个还要快1小时,GC时间都差不多。应该不是数据倾斜,论坛

  Spark资源调度和任务调度过程介绍(ps.未验证)一、前述Spark的资源调度是个很重要的模块,只要搞懂原理,才能具体明白Spark是怎么执行的,所以尤其重要。自愿申请的话,本文分粗粒度和细粒度模式...博文来自:helloxiaozhe的博客

  什么时候才能回归到看论文,写感想的日子呀~刚刚交完房租的我血槽已空。看了师妹关于Spark报告的PPT,好怀念学生时代开组会的时光啊,虽然我已经离开学校不长不短两个月,但我还是非常认真的翻阅了,并作为...博文来自:哆啦咪~fo

  一:任务调度与资源调度的区别1.任务调度:是通过DAGScheduler,TaskScheduler,SchedulerBackend等进行的作业调度;2.资源调度:是指应用程序如何获得资源;3.任务...博文来自:snail_gesture的博客

  阶段划分是作业调度过程的关键所在,首先探讨下Spark是如何进行阶段划分的。一个阶段划分的例子如下图所示,用虚线表示一个阶段,虚线框内所有的RDD都是为了实现该阶段而需要被计算的数据。整个作业最后一个...博文来自:PJ·Javis的专栏

  Spark调度架构原理解析1.启动spark集群,就是执行sbin/start-all.sh,启动master和多个worker节点,master主要作为集群的管理和监控,worker节点主要担任运行...博文来自:路漫漫其修远兮,吾将上下而求索

  来源作者:杨思义,2014年6月至今工作于北京亚信智慧数据科技有限公司BDX大数据事业部,从2014年9月开始从...博文来自:大数据系统安全实验室

  本次项目是基于大数据过滤引擎的电影推荐系统–“懂你”电影网站,包含了爬虫、电影网站(前端和后端)、后台管理系统以及推荐系统(Spark)。项目代码托管于github,大家可以自行下载。一、爬虫开发环境...博文来自:xl.zhang的博客

  帐号相关流程注册范围n企业n政府n媒体n其他组织换句话讲就是不让个人开发者注册。 :)填写企业信息不能使用和之前的公众号账户相同的邮箱,也就是说小程序是和微信公众号一个层级的。填写公司机构信息,对公账...博文来自:小雨同学的技术博客

  MATLAB编程题rn题目描述:从一个NxM的矩阵C中找出与1xM的矩阵P欧氏距离最小的某一行row,要求不能用循环!!!rn输入:矩阵C(NxM)、矩阵P(1xM)rn输出:rowrnrnrn解题思...博文来自:henryzhihua

  jquery/js实现一个网页同时调用多个倒计时(最新的)nn最近需要网页添加多个倒计时. 查阅网络,基本上都是千遍一律的不好用. 自己按需写了个.希望对大家有用. 有用请赞一个哦!nnnn//jsn...博文来自:Websites

  由于CLion的工程都是基于CMake来构建的,因此导入第三方库就需要在CMake文件中进行配置。这里把利用CMake导入第三方库的过程记录下来。...博文来自:大迷毛的LALALAND

  卷积神经网络是深度学习的基础,但是学习CNN却不是那么简单,虽然网络上关于CNN的相关代码很多,比较经典的是tiny_cnn(C++)、DeepLearnToolbox(Matlab)等等,但通过C语...博文来自:tostq的专栏

  扫二维码关注,获取更多技术分享nnn 本文承接之前发布的博客《 微信支付V3微信公众号支付PHP教程/thinkPHP5公众号支付》必须阅读上篇文章后才可以阅读这篇文章。由于最近一段时间工作比较忙,...博文来自:Marswill

  一、定义状态(State)模式又称为状态对象模式(Pattern of Objects for State),状态模式是对象的行为模式。状态模式允许一个对象在其内部状态改变时改变其行为,用于解决系统中...博文来自:小小本科生成长之路

  最近比较有空,大四出来实习几个月了,作为实习狗的我,被叫去研究Docker了,汗汗!nnDocker的三大核心概念:镜像、容器、仓库n镜像:类似虚拟机的镜像、用俗话说就是安装文件。n容器:类似一个轻量...博文来自:我走小路的博客

  本篇文章是根据我的上篇博客,给出的改进版,由于时间有限,仅做了一个简单的优化。相关文章:将excel导入数据库2018年4月1日,新增下载地址链接:点击打开源码下载地址十分抱歉,这个链接地址没有在这篇...博文来自:Lynn_Blog

  一、概述最近在springboot项目引入thymeleaf模板时,使用非严格标签时,运行会报错。默认thymeleaf模板对html5标签是严格检查的。二、在项目中加NekoHTML库在Maven中...博文来自:Luck_ZZ的博客

  本文介绍如何使用VS2015作为编译开发环境,调用OpenCV3.31和Qt5.9.1写图像处理的GUI。rn1.目录结构rn假设我们要创建一个名为VideoZoom的工程,那么首先按下图构建目录结构...博文来自:zhhp1001的博客

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

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

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

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

回顶部