Spark内核调度

目录

一、DAG

        (1)概念

        (2)Job和Action关系

        (3)DAG的宽窄依赖关系和阶段划分

二、Spark内存迭代计算

三、spark的并行度

        (1)并行度设置

        (2)集群中如何规划并行度

四、spark任务调度

五、Spark运行概念名词

        (1)概率名词

        (2)Spark运行层级梳理


一、DAG

        Spark的核心是根据RDD来实现的,Spark Scheduler则为Spark核心实现的重要一环,其作用就是任务调度。Spark的任务调度就是如何组织任务去处理RDD中每个分区的数据,根据RDD的依赖关系构建DAG,基于DAG划分Stage,将每个Stage中的任务发到指定节点运行。基于Spark的任务调度原理,可以合理规划资源利用,做到尽可能用最少的资源高效地完成任务计算。

b64e3724de674b01b7c94bf91e236beb.png

wordcount_DAG流程图

        (1)概念

        DAG:有向无环图。有方向没有形成闭环的一个执行流程图。

        有向:有方向。

        无环:没有形成闭环。

73b8cb5b952d48a1a75c8184ad8497e0.png

        (2)Job和Action关系

db5b310b2c34404facf04a7085598ff3.png

        一个Action会产生一个Job(一个应用程序内的子任务),每个Job会产生各自自己的DAG流程图。如上图,有三个Action,所以有三个Job,每一个链路对应这每个Job的DAG流程图。

        (3)DAG的宽窄依赖关系和阶段划分

        在SparkRDD前后之间的关系,分为:

        ①窄依赖:父RDD的一个分区,全部将数据发给子RDD的一个分区(一对一)

326a985206c94b65b893d64d12894ad6.png

        ②宽依赖(别名:shuffle):父RDD的一个分区,将数据发给子RDD的多个分区(一对多)

bcfc51f9c6214fe7be5431d5cf17601b.png

        对于Spark来说,会根据DAG,按照宽依赖,划分不同的DAG阶段。

        划分依据:从后向前,遇到宽依赖就划分出一个阶段,称为Stage。在Stage内部一定是窄依赖。

2b3268aa90c84321b3682bf6e03e4314.png

二、Spark内存迭代计算

6ce7df1e26a144aa890d073a98ade3b6.png

        如图,基于带有分区的DAG以及阶段划分。可以从图中得到逻辑上最优的task分配,一个task是一个线程来具体执行那么如上图, task1中rdd1、rdd2、rdd3的迭代计算,都是由一个task(线程完成),这一阶段的这一条线,是纯内存计算。
        如上图,task1、task2、task3就形成了三个并行的内存计算管道。Spark默认受到全局并行度的限制,除了个别算子有特殊分区情况,大部分的算子,都会遵循全局并行度的要求,来规划自己的分区数。如果全局并行度是3,其实大部分算子分区都是3。
        注意::Spark我们一般推荐只设置全局并行度,不要再算子上设置并行度,除了一些排序算子外,计算算子就让他默认开分区就可以了。

面试题1 : Spark是怎么做内存计算的? DAG的作用? Stage阶段划分的作用?
        ①Spark会产生DAG图。
        ②DAG图会基于分区和宽窄依赖关系划分阶段。
        ③一个阶段的内部都是窄依赖,窄依赖内,如果形成前后1:1的分区对应关系,就可以产生许多内存迭代计算的管道这些内存迭代计算的管道,就是一个个具体的执行Task。
        ④一个Task是一个具体的线程,任务跑在一个线程内,就是走内存计算了。

面试题2: Spark为什么比MapPeduce快

        ①Spark的算子丰富,MapReduce算子匮乏(Map和Reduce),MapReduce这个编程模型,很难在一套MR中处理复杂的任务。很多的复杂任务,是需要写多个MapReduce进行串联。多个MR串联通过磁盘交互数据。
        ②Spark可以执行内存迭代,算子之间形成DAG基于依赖划分阶段后,在阶段内形成内存迭代管道。但是MapReduce的Map和Reduce之间的交互依旧是通过硬盘来交互的。
总结:
        编程模型上Spark占优(算子够多)。
        算子交互上,和计算上可以尽量多的内存计算而非磁盘迭代。

三、spark的并行度

        Spark的并行:在同一时间内,有多少个task在同时运行
        并行度:并行能力的设置
        比如设置并行度6,其实就是要6个task并行在跑。在有了6个task并行的前提下,rdd的分区就被规划成6个分区了。

        (1)并行度设置

        可以在代码中和配置文件中以及提交程序的客户端参数中设置优先级从高到低:

        ①代码中

        ②客户端提交参数中配置文件中

        ③默认(1,但是不会全部以1来跑,多数时候基于读取文件的分片数量来作为默认并行度)

        全局并行度配置的参数:
                spark.default.parallelism

ea81179c91d1496283f3655cadeb981c.png

        全局并行度是推荐设置,不要针对RDD改分区,可能会影响内存迭代管道的构建,或者会产生额外的Shuffle。

        (2)集群中如何规划并行度

        结论:设置为CPU总核心的2-10倍。比如集群可用CPU核心是100个,建议并行度是200-1000。确保是CPU核心的整数倍即可,最小是2倍,最大一般是10或更高(适量)即可。

        为什么要设置最少2倍?

        CPU的一个核心同一时间只能干一件事情。所以,在100个核心的情况下,设置100个并行,就能1让CPU 100%出力。这种设置下,如果task的压力不均衡,某个task先执行完了。就导致某个CPu核心空闲。所以,我们将Task(并行)分配的数量变多,比如800个并行,同一时间只有100个在运行,700个在等待。但是可以确保,某个task运行完了。后续有task补上,不让cpu闲下来,最大程度利用集群的资源。规划并行度,只看jiqunzongCPU核数。

四、spark任务调度

        Spark的任务,由Driver进行调度,这个工作包含:

        ①逻辑DAG产生

        ②分区DAG产生

        ③Task划分

        ④将Task分配给Executor并监控其工作

46a828db853c4fc9b878d334306dc34b.png

        如图,Spark程序的调度流程如图(1-4都是Driver的工作,5是Worker的工作):

        ①Driver被构建出来

        ②构建SaprkContext(执行环境入口对象)

        ③基于DAG Scheduler(DAG调度器)goujainluojiTask分配

        ④基于TaskScheduler(Task调度器)将逻辑Task分配到各个Executor上干活,并监控他们

        ⑤Worker(Executor),被TaskScheduler管理监控,听从它们的指令干活,并定期汇报进度

DAG调度器(DAG Scheduler):将逻辑的DAG图进行处理,最终得到逻辑上的Task划分(重点)

Task调度器(Task Scheduler):基于DAG Scheduler的产出,来规划这些逻辑的task,应该在哪些物理的Executor上运行,以及监控管理它们的运行。

五、Spark运行概念名词

        (1)概率名词

Spark运行概念名词
TermMeaning
Application

用户编写的Spark应用程序,当该应用程序在集群上运行时包含一个driver program和多个executors。

Application  jar

包含Spark的应用程序的jar包

Driver program

是一个进程,包含Spark应用程序(application)的main方法,并且创建SparkContext。其中创建SparkContext的目的是为了准备Spark应用程序的运行环境。在Spark中由SparkContext负责和ClusterManager通信,进行资源的申请、任务的分配和监控等;当Executor部分运行完毕后,Driver负责将SparkContext关闭。通常用SparkContext代表Driver。

Cluster  manager

集群的管理者,SparkContext会与之进行通信,主要负责集群资源的管理,包括yarn、mesos。

Deploy  mode

运行模式,用来设定driver端在哪里运行,主要包括client和cluster。cluster模式中,driver端运行在集群中一个节点,client模式下,driver运行在集群之外。

Worker  node

集群中运行spark任务的节点。

Executor

一个进程,在worker node 运行应用程序,他可以运行task(计算),和保存应用程序中所用的数据到内存或者磁盘上。每一个应用程序拥有其独有的executor。在Spark on Yarn模式下,其进程名称为CoarseGrainedExecutorBackend,类似于Hadoop MapReduce中的YarnChild。一个CoarseGrainedExecutorBackend进程有且仅有一个executor对象,它负责将Task包装成taskRunner,并从线程池中抽取出一个空闲线程运行Task。每个CoarseGrainedExecutorBackend能并行运行Task的数量就取决于分配给它的CPU的个数了。

Task

被送到某个Executor上的工作单元,和hadoopMR中的MapTask和ReduceTask概念一样,是运行Application的基本单位,多个Task组成一个Stage,而Task的调度和管理等是由TaskScheduler负责。

Job并行化的运算集合
StageStage是每一个Job处理过程要分为的几个阶段,一个Stage可以有一个或多个Task。
TaskScheduler实现Task分配到Executor上执行。

        (2)Spark运行层级梳理

        ①一个Spark环境可以运行多个Application

        ②一个代码运行起来,会成为一个Application

        ③Application内部可以有多个Job

        ④每个Job由一个Action产生,并且每个Job有自己的DAG执行图

        ⑤一个Job的DAG图会基于宽窄依赖划分成不同的阶段

        ⑥不同阶段内基于分区数量,形成多个并行的内存迭代管道

        ⑦每一个内存迭代管道形成一个Task ( DAG调度器划分将Job内划分出具体的task任务,一个Job被划分出来的task在逻辑上称之为这个job的taskset )

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/168303.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Visual Studio Code官网下载、vscode下载很慢、vscode下载不了 解决方案

前言 开发界的小伙伴们对于Visual Studio Code开发环境来可以说非常熟悉了,但由于在Visual Studio Code官网的下载速度非常的慢,即便开了代理也是一样的很慢、甚至下载被中断,几乎不能下载。 解决方案 1、在Web浏览器上打开vscode官网&#…

RabbitMQ基础篇 笔记

RabbitMQ 余额支付 同步调用 一步一步的来,支付业务写完后,如果之后加需求,还需要增加代码,不符合开闭原则。 性能上也有问题,openfeign是同步调用,性能太差。 同步调用耦合太多。 同步的优势是可以立…

Android View拖拽startDragAndDrop,Kotlin

Android View拖拽startDragAndDrop,Kotlin import android.os.Bundle import android.util.Log import android.view.DragEvent import android.view.View import android.view.View.OnDragListener import android.view.View.OnLongClickListener import android.w…

C语言之排序

1.冒泡排序 冒泡排序就不多说了,只需要两层循环嵌套,两两比较确定相对正确的顺序即可。 2.插入排序 插入排序的思想就是每一次向后寻找一个再将其与前面有序的部分进行对比,寻找合适位置插入。 这里关键要避免让前移超出目前读取的数字&…

高效MMdetection(3.1.0)环境安装和训练自己数据集教程(实现于Linux(ubuntu),可在windows尝试)

一、前言 很久没用mmdetection了,作为目标检测常见的几个深度学习框架,mmdetection用的人还是很多的,其中比较吸引人的一点就是mmdetection集成了非常多的算法,对于想做实验对比和算法学习的人来说,基于这个框架可以事…

寻找二叉树一个节点的后继节点

后继节点:中序遍历的后一个节点 普通二叉树:中序遍历得到一个list,时间复杂度O(n) 本题的二叉树:有父节点的指针,后继节点与原节点的距离为1,因此可以直接通过父节点找到下一个节点 优化:节点…

64 最长公共子序列

最长公共子序列 题解1 DP 给定两个字符串 text1 和 text2,返回这两个字符串的 最长公共子序列的长度。如果不存在 公共子序列,返回 0 。 一个字符串的子序列是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些…

空间地图GIS基础

一、GIS基本概念 地理信息系统(Geographic Informaiton System, GIS)是一个可以建立、浏览、查询、分析地理空间数据的软件系统,其功能小至地图的展示,大至空间决策分析与支持。 1.GIS基础 (1)地理信息系统(GIS)的概念与组成 …

【Linux系统编程】命令模式2

目录 一,Linux下的初阶认识 1,管道 2,时间戳 二,Liunx系统命令操作 1,date时间指令 2,cal日历指令 3,which和find查找指令 3-1,which指令: 3-2,find…

Python 测试框架unittest和pytest的优劣

一、Unittest Unittest是Python标准库中自带的单元测试框架,Unittest有时候也被称为PyUnit,就像JUnit是Java语言的标准单元测试框架一样,Unittest则是Python语言的标准单元测试框架。 Unittest支持自动化测试,测试用例的初始化、…

JVM(一)

一、初始JVM 1.1 初始JVM JVM 本质上是一个运行在计算机上的程序,他的职责是运行Java字节码文件。 机器码是由二进制编码表示的计算机指令。每个机器码通常对应一个特定的操作,如加法、乘法、跳转等。机器码是计算机能够直接执行的代码,它可以在计算机的内存中存储和执行。…

11 Self-Attention相比较 RNN和LSTM的优缺点

博客配套视频链接: https://space.bilibili.com/383551518?spm_id_from=333.1007.0.0 b 站直接看 配套 github 链接:https://github.com/nickchen121/Pre-training-language-model 配套博客链接:https://www.cnblogs.com/nickchen121/p/15105048.html RNN 无法做长序列,当一…

Deep Learning for Geophysics综述阅读(未完)

文章题目《Deep Learning for Geophysics: Current and Future Trends》 文章解读:地球物理学(人工智能轨道)——(1)文献翻译《面向地球物理学的深度学习:当前与未来趋势》 - 知乎 (zhihu.com) 这里主要列…

【论文阅读】(2023TPAMI)PCRLv2

目录 AbstractMethodMethodnsU-Net中的特征金字塔多尺度像素恢复多尺度特征比较从多剪切到下剪切训练目标 总结 Abstract 现有方法及其缺点:最近的SSL方法大多是对比学习方法,它的目标是通过比较不同图像视图来保留潜在表示中的不变合判别语义&#xff…

基于springboot基于会员制医疗预约服务管理系统项目【项目源码+论文说明】

基于springboot实现会员制医疗预约服务信息系统演示 摘要 会员制医疗预约服务管理信息系统是针对会员制医疗预约服务管理方面必不可少的一个部分。在会员制医疗预约服务管理的整个过程中,会员制医疗预约服务管理系统担负着最重要的角色。为满足如今日益复杂的管理需…

福建泉州航海快艇蓝光三维扫描全尺寸测量船只外观设计三维建模-CASAIM中科广电

造船行业是一个与全球经济发展密切相关的关键行业。近年来,随着全球经济的快速发展,造船行业也不断进步和发展。快艇制造业作为小型、快速的船只的产业,所生产的船只通常用于娱乐、旅游、商业等方面,因此这种类型的快艇对于外观设…

企业云网盘:如何选择最适合您的解决方案?

企业日常办公每天都会产出大量的文件,如何安全管理文件?企业如何进行高效的文件的共享?企业云网盘产品为企业提供了一个文件解决方案,其安全便捷的特点已成为文件数据管理的热门之选。然而越来越多的品牌进入了企业云网盘市场&…

HUDI概述

序言 参考资料: https://hudi.apache.org/cn/docs/0.9.0/overviewhttps://hudi.apache.org/cn/Overview | Apache Hudi //最新版本的hudi文档 与之前的文档有概述上的很大差异 概述 HUDI(Hadoop Upserts Deletes and Incrementals)是一个开源的数据…

SparkSQL之LogicalPlan概述

逻辑计划阶段在整个流程中起着承前启后的作用。在此阶段,字符串形态的SQL语句转换为树结构形态的逻辑算子树,SQL中所包含的各种处理逻辑(过滤、剪裁等)和数据信息都会被整合在逻辑算子树的不同节点中。逻辑计划本质上是一种中间过…

网络拓扑图怎么画最好?

你们好,我的网工朋友。 好久没和你们聊拓扑图了,群里总是不乏有人问,拓扑图怎么设计,怎么配置,或者让大佬看看自己做的这图有没有啥问题的…… 画拓扑图的方式有很多,在线软件,Visio&#xff…